Menu Docs

Página inicial do DocsDesenvolver aplicaçõesAtlas Device SDKs

Usuários de e-mail/senha - Flutter SDK

Nesta página

  • Antes de começar
  • Registrar um usuário
  • Conectar um usuário
  • Confirmar um endereço de e-mail de novo usuário
  • Função de confirmação personalizada
  • Enviar um e-mail de confirmação
  • Tentar novamente a confirmação do usuário
  • Tentar novamente uma função de confirmação do usuário
  • Reenviar um e-mail de confirmação do usuário
  • Redefinir a senha de um usuário
  • Chamar uma função de redefinição
  • Enviar e-mail de redefinição de senha

Com o provedor de autenticação de e-mail/senha do Atlas App Services, você pode registrar uma nova conta, confirmar um endereço de e-mail e redefinir a senha de um usuário a partir do código do cliente.

Aviso

Versão 0.5.0 Mudança significativa

O Realm Flutter SDK versão 0.5.0 inclui uma alteração interruptiva na autenticação de e-mail/senha. A alteração corrige um bug em que o caractere nulo unicode \u0000 era anexado ao final das senhas em versões anteriores do SDK.

Como resultado, depois de atualizar seu aplicativo para usar a versão >0.5.0, os usuários deverão redefinir a senha ou criar uma nova conta. As senhas anteriores não funcionarão mais após a atualização para >0.5.0.

  1. Criar um aplicativo do App Services.

  2. Antes de começar a escrever o código do cliente, você deve entender os diferentes fluxos de autenticação de email/senha que o App Services fornece e configurar a implementação de backend do seu aplicativo. O App Services tem várias maneiras de confirmar identidades de usuário de e-mail/senha e redefinir senhas de usuário. Saiba mais sobre, habilite e configure a autenticação de e-mail/senha do App Services.

  1. Criar um novo EmailPasswordAuthProvider instância com sua App instância como argumento.

  2. Invocar EmailPasswordAuthProvider.registerUser(), passando o e-mail e a senha do usuário como argumentos.

EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.registerUser("lisa@example.com", "myStr0ngPassw0rd");

Observação

Registrar um usuário também não registra esse usuário. Você deve fazer o login do usuário separadamente.

  1. Crie uma credencial de e-mail/senha ligando para Crereditals.emailPassword() com o e-mail e a senha do usuário.

  2. Passe a credencial gerada para app.logIn .

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

Depois de registrar um novo usuário de e-mail/senha, você deve confirmar o endereço de e-mail, a menos que configure o App Services para confirmar automaticamente os usuários.

Se você configurar o App Services para usar uma função personalizada para confirmação de endereço de e-mail, manipule a confirmação do usuário com a lógica do fluxo da função personalizada. O backend do App Services invoca a função personalizada quando o usuário se registra.

Você só precisa enviar um e-mail de confirmação se configurar o App Services para lidar com a confirmação do usuário por e-mail.

Para confirmar um usuário recém-criado, passe uma confirmação token e tokenId para EmailPasswordAuthProvider.confirmUser(). Eles estão incluídos no e-mail enviado para o endereço de e-mail do usuário quando ele se registra.

EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.confirmUser(token, tokenId);

Observação

Use links detalhados em aplicativos Flutter

Os aplicativos móveis podem lidar com a confirmação por e-mail diretamente na aplicação configurando links detalhados.

O SDK fornece métodos para reenviar e-mails de confirmação do usuário ou tentar novamente a confirmação personalizada.

Use este método de confirmação do usuário se você tiver configurado o backend do App Services para tentar novamente uma função de confirmação do usuário personalizada.

Para tentar novamente uma função de confirmação, passe o e-mail usado na inscrição para EmailPasswordAuthProvider.retryCustomConfirmationFunction().

EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.retryCustomConfirmationFunction("lisa@example.com");

Use este método de confirmação do usuário se você tiver configurado o backend do App Services para reenviar um e-mail de confirmação. Os tokens de confirmação em cada URL expiram após 30 minutos. Se um usuário não seguir o link e confirmar dentro desse período, ele deverá solicitar um novo e-mail de confirmação.

Para reenviar um e-mail de confirmação, passe o e-mail usado na inscrição para EmailPasswordAuthProvider.resendUserConfirmation().

EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.resendUserConfirmation("lisa@example.com");

A redefinição da senha de um usuário é um processo de várias etapas.

  1. Em seu aplicativo cliente, você fornece uma interface do usuário para o usuário redefinir a senha. Em seguida, seu App Services App pode enviar um e-mail ou executar uma função personalizada para confirmar a identidade do usuário.

  2. Após confirmar a identidade do usuário, você pode concluir a solicitação de redefinição de senha.

  3. Após a redefinição de senha ser concluída, o usuário poderá se conectar usando a nova senha.

Para selecionar quais desses métodos usar em sua aplicação, configure o comportamento de redefinição de senha de autenticação do App Services.

Ao configurar seu aplicativo para executar uma função de redefinição de senha, você define a função que deve ser executada quando chamar EmailPasswordAuthProvider.callResetPasswordFunction(). Esta função pode receber um nome de usuário, uma senha e qualquer número de argumentos adicionais. Você pode usar esses argumentos para especificar detalhes como respostas a perguntas de segurança ou outros desafios que o usuário deve passar para concluir com êxito uma redefinição de senha.

Você pode preferir usar uma função personalizada de redefinição de senha quando quiser definir seus próprios fluxos de redefinição de senha. Por exemplo, você pode enviar um e-mail de redefinição de senha personalizado de um domínio específico. Ou você pode usar um serviço diferente do e-mail para confirmar a identidade do usuário.

No lado do App Services, você define a função personalizada de redefinição de senha que é executada quando você chama esse método. Essa função pode retornar um dos três status possíveis:

  • fail

  • pending

  • success

Um status fail é tratado como um erro pelo SDK. O SDK callResetPasswordFunction() não recebe valores de retorno, portanto, não retorna um status pending ou success ao cliente.

Sua função de redefinição de senha do App Services pode retornar pending se você quiser que o usuário execute alguma etapa adicional para confirmar sua identidade. No entanto, esse valor de retorno não é passado para o callResetPasswordFunction() do SDK, portanto, seu aplicativo cliente deve implementar sua própria lógica para lidar com um status pending .

Sua função no servidor pode enviar um e-mail usando um provedor de e-mail personalizado. Ou você pode usar SMS para confirmar a identidade do usuário por mensagem de texto.

Você tem acesso a um token e tokenId no contexto da função de redefinição de senha do App Services. Se você passar essas informações da função de redefinição de senha do App Services, poderá passar esses valores de volta ao seu aplicativo usando links detalhados ou links universais específicos da plataforma. Em seguida, seu aplicativo cliente pode chamar EmailPasswordAuthProvider.completeResetPassword para concluir o fluxo de redefinição de senha.

// The password reset function takes any number of
// arguments.
final args = [];
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.callResetPasswordFunction(
"lisa@example.com", "n3wSt0ngP4ssw0rd!",
functionArgs: args);
// ... Later...
// Token and tokenId are parameters you can access
// in the App Services function context. You could send
// this to the user via email, SMS, or some other method.
final token = "someToken";
final tokenId = "someTokenId";
await authProvider.completeResetPassword(
"n3wSt0ngP4ssw0rd!", token, tokenId);

Se a função de redefinição de senha do App Services fizer validação adicional dentro da função ou se você tiver validado a identidade do usuário antes de tentar redefinir a senha, poderá configurar a função App Services para retornar success. No entanto, esse valor de retorno não é passado para o callResetPasswordFunction() do SDK, portanto, seu aplicativo cliente deve implementar sua própria lógica para lidar com um status success .

Chamar a função neste exemplo executa todo o processo de redefinição de senha.

// The password reset function takes any number of
// arguments. You might ask the user to provide answers to
// security questions, for example, to verify the user
// should be able to complete the password reset.
final args = [
"Snowball II",
"Springfield Elementary School",
"Bouvier"
];
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.callResetPasswordFunction(
"lisa@example.com", "n3wSt0ngP4ssw0rd!",
functionArgs: args);

Para enviar e-mails de redefinição de senha para confirmar a identidade do usuário, você deve configurar seu aplicativo para enviar um e-mail de redefinição de senha.

Para enviar um e-mail de redefinição de senha, passe o e-mail usado na inscrição para EmailPasswordAuthProvider.resetPassword().

EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.resetPassword("lisa@example.com");

Os e-mails de redefinição de senha contêm uma URL codificada com dois valores, token e tokenId. Para concluir o fluxo de redefinição de senha, você pode redefinir a senha do usuário no cliente ou chamando uma função personalizada no backend. Para usar o SDK para concluir a redefinição de senha, passe esses valores para EmailPasswordAuthProvider.completeResetPassword().

Se o usuário não acessar a URL do e-mail de redefinição de senha dentro de 30 minutos, o token e o tokenId expirarão. Você deve iniciar o processo de redefinição de senha novamente.

EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app);
await authProvider.completeResetPassword(
"n3wSt0ngP4ssw0rd!", token, tokenId);

Observação

Para acessar token os tokenId valores e enviados no e-mail de redefinição de senha, você pode usar um e- mail de redefinição de senha personalizado contendo um link detalhado.

← Autenticar usuários - Flutter SDK