Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Autenticar usuários - Flutter SDK

Nesta página

  • Antes de começar
  • Registrar uma nova conta de usuário
  • Conecte-se
  • Utilizador anónimo
  • Usuário de e-mail/senha
  • Usuário JWT personalizado
  • Usuário da chave de API
  • Usuário de função personalizada
  • Usuário do Facebook
  • Usuário do Google
  • Usuário da Apple
  • Atualize a expiração do token
  • Desconectar um usuário
  • Recuperar usuário atual

O Atlas App Services fornece uma API para autenticar usuários usando qualquer provedor de autenticação habilitado. Instanciar um Credenciais objeto e passe para App.logIn() para autenticar e criar um usuário objeto para esse usuário. Cada provedor de autenticação corresponde a um método de construtor estático utilizado para instanciar Credentials objetos para este provedor de autenticação.

  1. Criar um aplicativo do App Services.

  2. Ative e configure um ou mais Atlas App Services fornecedores de autenticação .

O Realm registra contas de forma diferente, dependendo do provedor de autenticação:

  • Você não precisa registrar usuários anônimos.

  • Para registrar um usuário de e-mail/senha, consulte Registro de usuário de e-mail/senha.

  • Se você estiver usando a autenticação do Google, Facebook, Apple ou Custom JWT, o registro será tratado por esses serviços de terceiros.

Você pode autenticar usuários com App.logIn().

Se for bem-sucedido, app.logIn retornará um objeto User.

O provedor de autenticação anônima permite que os usuários façam login no seu aplicação com contas de curto prazo que não armazenam informações pessoais persistentes. Para fazer login com autenticação anônima,crie uma credencial anônima chamando Credentials.anonymous() e depois passar a credencial gerada para app.logIn.

final anonCredentials = Credentials.anonymous();
await app.logIn(anonCredentials);

Se você desejar mais de um usuário anônimo, configure o reuseCredentials: false ao criar credenciais anônimas adicionais.

final anonUser = await app.logIn(Credentials.anonymous());
final otherAnonUser =
await app.logIn(Credentials.anonymous(reuseCredentials: false));

O fornecedor de autenticação por e-mail/senha permite que os usuários se conectam no seu aplicativo com um nome de usuário e uma senha de e-mail. Para se conectar com a autenticação por e-mail/senha, crie uma credencial de e-mail/senha chamando credentials.emailPassword () com o e-mail e a senha do usuário. Em seguida, passe a credencial para app.logIn.

final emailPwCredentials =
Credentials.emailPassword("lisa@example.com", "myStr0ngPassw0rd");
await app.logIn(emailPwCredentials);

Para saber mais sobre o fluxo completo de uso da autenticação por e-mail/senha do App Services, consulte Usuários de e-mail/senha.

Se você tiver configurado o provedor de autenticação Custom JWT, poderá fazer login usando credenciais JWT de um provedor de autenticação externo.

Para fazer login com a JSON web token autenticação personalizado, crie JSON web token uma credencial de chamando Credentials.jwt () em uma de JSON web token string. Em seguida, passe a credencial para app.logIn.

final token = await authenticateWithExternalSystem();
final jwtCredentials = Credentials.jwt(token);
final currentUser = await app.logIn(jwtCredentials);

Se você ativou a autenticação por chave de API, poderá fazer login usando uma chave de API do cliente ou do servidor.

Para fazer login com autenticação de chave API, crie uma ApiKey credencial chamando Credentials.apiKey() em uma string de chave API. Em seguida, passe a credencial para app.logIn().

final apiKeyCredentials = Credentials.apiKey(myApiKey);
final apiKeyUser = await app.logIn(apiKeyCredentials);

Para gerar uma chave de API de servidor para usar em suas credenciais, consulte a documentação Criar uma chave de API de servidor.

Para trabalhar com chaves API de usuário com as mesmas permissões que o usuário conectado atualmente, use o cliente User.apiKeys. Você pode criar, buscar, excluir, desabilitar e habilitar chaves de API do usuário.

// Create user API key
final apiKey = await user.apiKeys.create("api-key-name");
// Get existing user API key by ID
// Returns `null` if no existing API key for the ID
final refetchedApiKey = await user.apiKeys.fetch(apiKey.id);
// Get all API keys for a user
final apiKeys = await user.apiKeys.fetchAll();
// Disable API key
await user.apiKeys.disable(apiKey.id);
// Check if API key is enabled
print(apiKey.isEnabled); // prints `false`
// Enable API key
await user.apiKeys.enable(apiKey.id);
// Delete a user API key
await user.apiKeys.delete(apiKey.id);

Se você tiver configurado o provedor de autenticação de Função Personalizada, poderá fazer login usando a lógica de autenticação personalizada manipulada por uma Função Atlas.

Para fazer login com a autenticação de função personalizada, passe um JSON em string com seus argumentos personalizados para Credentials.function() . Em seguida, passe a credencial para app.logIn.

final credentials = {
"username": "someUsername",
};
// payload must be a JSON-encoded string
final payload = jsonEncode(credentials);
final customCredentials = Credentials.function(payload);
final currentUser = await app.logIn(customCredentials);

Se você configurou o provedor de autenticação do Facebook, poderá se conectar usando uma conta existente do Facebook.

Para fazer login com a autenticação do Facebook, passe um token de acesso do Facebook para Credentials.facebook(). Em seguida, passe a credencial para app.logIn.

final facebookCredentials = Credentials.facebook(accessToken);
final currentUser = await app.logIn(facebookCredentials);

Importante

Não armazene URLs de fotos de perfil do Facebook

Os URLs da imagem de perfil do Facebook incluem o token de acesso do usuário para conceder permissão à imagem. Para garantir a segurança, não armazene um URL que inclua um token de acesso do usuário. Em vez disso, acesse o URL diretamente dos campos de metadados do usuário quando precisar buscar a imagem.

Se você configurou o provedor de autenticação do Google, poderá se conectar usando uma conta existente do Google.

Para fazer login com um código de autenticação do Google, passe um código de autenticação do Google para Credentials.googleAuthCode(). Em seguida, passe a credencial para app.logIn.

final googleAuthCodeCredentials = Credentials.googleAuthCode(authCode);
final currentUser = await app.logIn(googleAuthCodeCredentials);

Para fazer login com um token de ID do Google, passe um token de ID do Google para credentials.googleIdToken (). Em seguida, passe a credencial para app.logIn.

final googleIdTokenCredentials = Credentials.googleIdToken(idToken);
final currentUser = await app.logIn(googleIdTokenCredentials);

Se tiver configurado o provedor de autenticação Iniciar sessão com o Apple, pode iniciar sessão utilizando uma conta Apple existente.

Para iniciar sessão com a autenticação Apple, passe um token de acesso Apple para Credentials.apple(). Em seguida, passe a credencial para app.logIn.

final appleCredentials = Credentials.apple(idToken);
final currentUser = await app.logIn(appleCredentials);

Dica

Se você receber uma mensagem de erro Login failed dizendo que o token contains an invalid number of segments, verifique se está passando uma versão de string codificada em UTF-8 do JWT.

A atualização dos tokens expira após um período de tempo definido. Quando o token de atualização expira, o token de acesso não pode mais ser atualizado e o usuário deve se conectar novamente.

Se o token de atualização expirar após a abertura do domínio, o dispositivo não poderá sincronizar até que o usuário faça login novamente. Seu manipulador de erros de sincronização deve implementar uma lógica que capture um erro de token expirado ao tentar sincronizar e, em seguida, redirecionar os usuários para um fluxo de login.

Para obter informações sobre como configurar a expiração do token de atualização, consulte Gerencie sessões de usuário na documentação do App Services.

Você pode desconectar qualquer usuário, independentemente do fornecedor de autenticação usado para o registro, usando User.logOut(). Este método:

  • Exclui credenciais de usuário armazenadas localmente do dispositivo

  • Interrompe imediatamente qualquer sincronização de e para os domínios do usuário

Como o encerramento da sessão interrompe a sincronização, você só deve sair depois que todas as atualizações locais do Realm tiverem sido enviadas para o servidor.

await user.logOut();

Depois de ter um usuário autenticado, você pode recuperar o objeto de usuário com o método App.currentUser propriedade. O objeto currentUser é mantido no armazenamento local, portanto, mesmo que o aplicativo seja desligado após a autenticação inicial, não é necessário chamar o logIn novamente (a menos que o usuário tenha se desconectado).

final user = app.currentUser;

Voltar

Gerenciar usuários