Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Autenticar usuários - Flutter SDK

O Atlas App Services fornece uma API para autenticar usuários usando qualquer provedor de autenticação habilitado. Instancie um objetoCredenciais e passe-o para App.login() para autenticar e criar um objeto de usuário para esse usuário. Cada provedor de autenticação corresponde a um método de construtor estático usado para instanciar Credentials objetos para esse 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 app.logIn para.

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 provedor de autenticação por e-mail/senha permite que os usuários se conectam no seu aplicação 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 app.logIn para.

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 autenticação Custom JWT, crie uma credencial JWT chamando Credentials.jwt () em uma string JWT. Em seguida, passe a credencial app.logIn para.

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 se conectar com a autenticação de chave API, crie uma credencial ApiKey chamando Credentials.apiKey() em uma string de chave API. Em seguida, passe a credencial app.logIn() para.

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 app.logIn para.

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 app.logIn para.

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 app.logIn para.

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 app.logIn para.

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 app.logIn para.

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 provedor 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 Usuário com a propriedade App.currentUser. O currentUser objeto é 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

Nesta página