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.
Antes de começar
Ative e configure um ou mais Atlas App Services fornecedores de autenticação .
Registrar uma nova conta de usuário
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.
Conecte-se
Você pode autenticar usuários com App.logIn().
Se for bem-sucedido, app.logIn
retornará um objeto User
.
Utilizador anónimo
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));
Usuário de e-mail/senha
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.
Usuário JWT personalizado
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);
Usuário da chave de API
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);
Usuário de função personalizada
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);
Usuário do Facebook
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.
Usuário do Google
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);
Usuário da Apple
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.
Atualize a expiração do token
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.
Desconectar um usuário
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();
Recuperar usuário atual
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;