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.
Antes de começar
Antes de começar a escrever o código do cliente, você deve entender os diferentes fluxos de autenticação de e-mail/senha que o Atlas App Services fornece e configurar a implementação de backend do seu aplicativo. Atlas App Services tem uma variedade de maneiras de confirmar identidades de usuário de e-mail/senha e redefinir senhas de usuário. Saiba mais sobre, habilite e configure Atlas App Services a autenticação de e-mail/senha .
Registrar um usuário
Criar um novo EmailPasswordAuthProvider instância com sua
App
instância como argumento.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.
Conectar um usuário
Crie uma credencial de e-mail/senha ligando para Crereditals.emailPassword() com o e-mail e a senha do usuário.
Passe a credencial gerada para
app.logIn
.
final emailPwCredentials = Credentials.emailPassword("lisa@example.com", "myStr0ngPassw0rd"); await app.logIn(emailPwCredentials);
Confirmar um endereço de e-mail de novo usuário
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 Atlas App Services para confirmar automaticamente os usuários.
Função de confirmação personalizada
Se você configurar o Atlas 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 sua função personalizada. O backend do Atlas App Services invoca a função personalizada quando o usuário se registra.
Enviar um e-mail de confirmação
Você só precisa enviar um e-mail de confirmação se configurar o Atlas 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.
Tentar novamente a confirmação do usuário
O SDK fornece métodos para reenviar e-mails de confirmação do usuário ou tentar novamente a confirmação personalizada.
Tentar novamente uma função de confirmação do usuário
Use este método de confirmação do usuário se você tiver configurado o backend do Atlas App Services para tentar novamente uma função personalizada de confirmação do usuário.
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");
Reenviar um e-mail de confirmação do usuário
Use este método de confirmação do usuário se você tiver configurado o backend do Atlas 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");
Redefinir a senha de um usuário
A redefinição da senha de um usuário é um processo de várias etapas.
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.
Após confirmar a identidade do usuário, você pode concluir a solicitação de redefinição de senha.
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 seu aplicativo, configure o comportamento de redefinição de senha de autenticação do Atlas App Services .
Chamar uma função de redefinição
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.
Caso pendente do lado do servidor
Sua função de redefinição de senhaAtlas 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 Atlas App Services . Se você passar essas informações pela função de redefinição de senha do Atlas 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);
Caso de sucesso do servidor
Se a função de redefinição de senha doAtlas 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 do Atlas 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);
Enviar e-mail de redefinição de senha
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.