Cuando habilitas el Proveedor de correoelectrónico/contraseña en su aplicación Atlas App Services, puede manejar la autenticación del usuario desde el código del cliente registrando e iniciando sesión como un nuevo usuario.
Register a New User
Para registrar un nuevo usuario, pase un correo electrónico y una contraseña proporcionados por el usuario a app.emailPasswordAuth.registerUser():
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interactions app.emailPasswordAuth.registerUser(email, password) }
Confirm a New User's Email Address
Al habilitar el proveedor de correo electrónico/contraseña en Servicios de aplicación, debe seleccionar un método de confirmación. El servicio de confirmación de contraseña/correo electrónico de App Services proporciona un token y un tokenId que puedes dar al usuario por correo electrónico o por una Atlas Function personalizada. Para confirmar al usuario, proporciona ese token y tokenId en aplicación.emailPasswordAuth.confirmUser():
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interactions app.emailPasswordAuth.confirmUser(token, tokenId) }
After you confirm the user, you can proceed to login with email/password credentials.
Retry User Confirmation Methods
El SDK proporciona métodos para volver a enviar correos electrónicos de confirmación de usuario o reintentar métodos de confirmación personalizados.
Reenviar un correo electrónico de confirmación de usuario
Reenviar un correo electrónico de confirmación. Los tokens de confirmación de cada URL caducan después de 30 minutos. Si un usuario no sigue el enlace ni confirma la confirmación dentro de ese plazo, deberá solicitar un nuevo correo electrónico de confirmación.
Para reenviar un correo electrónico de confirmación de usuario, proporcione la dirección de correo electrónico del usuario a app.emailPasswordAuth.resendConfirmationEmail():
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interaction app.emailPasswordAuth.resendConfirmationEmail(email) }
Retry a User Confirmation Function
Para volver a intentar una función de confirmación de usuario personalizada, proporcione la dirección de correo electrónico del usuario a app.emailPasswordAuth.retryCustomConfirmation():
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interaction app.emailPasswordAuth.retryCustomConfirmation(email) }
Reset a User's Password
Resetting a user's password is a multi-step process.
En su aplicación de cliente, proporciona una interfaz de usuario para que el usuario restablezca su contraseña. Su App Services App puede enviar un correo electrónico o ejecutar una función personalizada para confirmar la identidad del usuario.
After confirming the user's identity, you can complete the password reset request.
After the password reset is complete, the user can log in using the new password.
Para obtener más información sobre cómo configurar tu método preferido de restablecimiento de contraseña, consulta la Documentación de autenticación por correo electrónico/contraseña de aplicación Services.
Send a Password Reset Email
Para enviar correos de restablecimiento de contraseña y así confirmar la identidad del usuario, se debe configurar la aplicación para enviar un correo de restablecimiento de contraseña.
Para iniciar el proceso de restablecimiento de contraseña, llame a app.emailPasswordAuth.sendResetPasswordEmail() con el correo electrónico del usuario. App Services envía un correo electrónico al usuario con una URL única. El usuario debe visitar esta URL en un 30 plazo de minutos para confirmar el restablecimiento.
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interaction app.emailPasswordAuth.sendResetPasswordEmail(email) }
Después de que el usuario haya visitado la URL del correo electrónico de restablecimiento de contraseña, llame a app.emailPasswordAuth.resetPassword() con el correo electrónico del usuario, la nueva contraseña y la token y tokenId proporcionado en la URL única.
If the user does not visit the URL from the password reset email within 30 minutes, the token and tokenId expire. You must begin the password reset process again.
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interactions app.emailPasswordAuth.resetPassword(token, tokenId, newPassword) }
Ejecutar una función de restablecimiento de contraseña
When you configure your app to run a password reset function, you define the function that should run when you call app.emailPasswordAuth.callResetPasswordFunction() from the SDK. This function can take a username, a password, and any number of additional arguments. You can use these arguments to specify details like security question answers or other challenges that the user should pass to successfully complete a password reset.
Es posible que prefieras usar una función personalizada de restablecimiento de contraseña cuando quieras definir tus propios flujos de restablecimiento de contraseña. Por ejemplo, puede que envíes un correo electrónico personalizado de restablecimiento de contraseña desde un dominio específico. O podría usar un servicio que no sea correo electrónico para confirmar la identidad del usuario.
On the App Services side, you define the custom password reset function that runs when you call this method. That function can return one of three possible statuses:
failpendingsuccess
A fail status is treated as a ServiceException error by the SDK. The SDK callResetPasswordFunction() does not return a pending or success status to the client.
Caso pendiente del lado del servidor
La función de restablecimiento de contraseña de App Services puede devolver pending si desea que el usuario realice algún paso adicional para confirmar su identidad. Sin embargo, este valor de retorno no se pasa al del callResetPasswordFunction() SDK, por lo que la aplicación cliente debe implementar su propia lógica para gestionar un pending estado.
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interaction app.emailPasswordAuth.callResetPasswordFunction(email, newPassword) }
Tu función del lado del servidor puede enviar un correo electrónico utilizando un proveedor de correo electrónico personalizado. O puedes usar SMS para confirmar la identidad del usuario mediante un mensaje de texto.
Tienes acceso a token y tokenId en el contexto de la función de restablecimiento de contraseña de App Services. Si pasas esta información desde la función de restablecimiento de contraseña de App Services, puedes devolver estos valores a tu aplicación mediante enlaces profundos en Android.o enlaces universales en iOS. Luego, la aplicación cliente puede llamar resetPassword() a para completar el proceso de restablecimiento de contraseña.
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interactions app.emailPasswordAuth.resetPassword(token, tokenId, newPassword) }
Server-Side Success Case
If your App Services password reset function does additional validation within the function, or if you have validated the user's identity prior to attempting to reset the password, you may configure the App Services function to return success. However, that return value is not passed to the SDK's callResetPasswordFunction(), so your client app must implement its own logic to handle a success status.
Llamar a la función en este ejemplo realiza todo el proceso de restablecimiento de contraseña.
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { // use runBlocking sparingly -- it can delay UI interaction app.emailPasswordAuth.callResetPasswordFunction(email, newPassword, args) }
Log In or Log Out a User
After you register a user, it is a separate step to log the user in.
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { val emailPasswordCredentials = Credentials.emailPassword(email, password) val user = app.login(emailPasswordCredentials) }
You can log out an authenticated user.
val app: App = App.create(YOUR_APP_ID) // Replace this with your App ID runBlocking { val user = app.login(credentials) // ... work with logged-in user ... // Ensure all local updates are uploaded // before logging out user.logOut() }