Docs Menu
Docs Home
/ /
Administrar usuarios

Administrar usuarios con correo electrónico y contraseña - Swift SDK

Cuando haya habilitado el Proveedor de correo electrónico/contraseña en su aplicación Atlas App Services, puede registrar una nueva cuenta, confirmar una dirección de correo electrónico y restablecer la contraseña de un usuario desde el código de cliente.

Modificado en la 10.16.0 versión: Las API de usuario de correo electrónico/contraseña incorporan compatibilidad con async/await. Los ejemplos de código de esta página se actualizaron a la sintaxis async/await. Para ver un ejemplo de la sintaxis anterior, consulte: Ejemplos de usuario de correo electrónico/contraseña con controladores de finalización.

RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
RLMEmailPasswordAuth *client = [app emailPasswordAuth];
NSString *email = @"skroob2@example.com";
NSString *password = @"password12345";
[client registerUserWithEmail:email password:password completion:^(NSError *error) {
if (error != nil) {
NSLog(@"Failed to register: %@", [error localizedDescription]);
return;
}
// Registering just registers. You can now log in.
NSLog(@"Successfully registered user.");
}];
let app = App(id: YOUR_APP_SERVICES_APP_ID)
let client = app.emailPasswordAuth
let email = "skroob@example.com"
let password = "password12345"
do {
try await client.registerUser(email: email, password: password)
// Registering just registers. You can now log in.
print("Successfully registered user.")
} catch {
print("Failed to register: \(error.localizedDescription)")
}
RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
RLMEmailPasswordAuth *client = [app emailPasswordAuth];
// Token and tokenId are query parameters in the confirmation
// link sent in the confirmation email.
NSString *token = @"someToken";
NSString *tokenId = @"someTokenId";
[client confirmUser:token tokenId:tokenId completion:^(NSError *error) {
if (error != nil) {
NSLog(@"User confirmation failed: %@", [error localizedDescription]);
return;
}
// User confirmed
NSLog(@"Successfully confirmed user.");
}];
let app = App(id: YOUR_APP_SERVICES_APP_ID)
let client = app.emailPasswordAuth
// Token and tokenId are query parameters in the confirmation
// link sent in the confirmation email.
let token = "someToken"
let tokenId = "someTokenId"
do {
try await client.confirmUser(token, tokenId: tokenId)
// User email address confirmed.
print("Successfully confirmed user.")
} catch {
print("User confirmation failed: \(error.localizedDescription)")
}

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. 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.

let app = App(id: YOUR_APP_SERVICES_APP_ID)
let client = app.emailPasswordAuth
let email = "skroob@example.com"
// If Realm is set to send a confirmation email, we can
// send the confirmation email again here.
do {
try await client.resendConfirmationEmail(email)
// The confirmation email has been sent
// to the user again.
print("Confirmation email resent")
} catch {
print("Failed to resend confirmation email: \(error.localizedDescription)")
}

Nuevo en la versión 10.9.0.

Reintente una función de confirmación de usuario personalizada.

let app = App(id: YOUR_APP_SERVICES_APP_ID)
let client = app.emailPasswordAuth
let email = "skroob@example.com"
// If Realm is set to run a custom confirmation function,
// we can trigger that function to run again here.
do {
try await client.retryCustomConfirmation(email)
// The custom confirmation function has been
// triggered to run again for the user.
print("Custom confirmation retriggered")
} catch {
print("Failed to retry custom confirmation: \(error.localizedDescription)")
}

Restablecer la contraseña de un usuario es un proceso de varios pasos.

  1. En tu aplicación cliente, proporcionas una interfaz de usuario para que el usuario restablezca su contraseña. Tu aplicación de App Services puede enviar un correo electrónico o ejecutar una función personalizada para confirmar la identidad del usuario.

  2. Después de confirmar la identidad del usuario, puede completar la solicitud de restablecimiento de contraseña.

  3. Una vez completado el restablecimiento de la contraseña, el usuario puede iniciar sesión con la nueva contraseña.

Para obtener más información sobre cómo configurar su método preferido de restablecimiento de contraseña, consulte la documentación de Autenticación de contraseña/correo electrónico de los servicios de aplicaciones.

Para enviar correos electrónicos de restablecimiento de contraseña para confirmar la identidad del usuario, debe configurar su aplicación para enviar un correo electrónico de restablecimiento de contraseña.

Para comenzar el proceso de restablecimiento de contraseña, llame al 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 30 minutos para confirmar el restablecimiento.

Después de que el usuario haya visitado la URL del correo electrónico de restablecimiento de contraseña, llame a resetPassword con el correo electrónico del usuario, la nueva contraseña y token y tokenId proporcionados en la URL única.

Si el usuario no visita la URL del correo electrónico de restablecimiento de contraseña en 30 minutos, los token y tokenId caducarán. Debe reiniciar el proceso de restablecimiento de contraseña.

RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
RLMEmailPasswordAuth *client = [app emailPasswordAuth];
// If Realm app password reset mode is "Send a password reset email",
// we can do so here:
NSString *email = @"forgot.my.password@example.com";
[client sendResetPasswordEmail:email completion:^(NSError *error) {
if (error != nil) {
NSLog(@"Failed to send reset password email: %@", [error localizedDescription]);
return;
}
// Email sent.
NSLog(@"Successfully sent reset password email.");
}];
// Later...
NSString *newPassword = @"mynewpassword12345";
// Token and tokenId are query parameters in the confirmation
// link sent in the reset password email.
NSString *token = @"someToken";
NSString *tokenId = @"someTokenId";
[client resetPasswordTo:newPassword token:token tokenId:tokenId completion:^(NSError *error) {
if (error != nil) {
NSLog(@"Failed to reset password: %@", [error localizedDescription]);
return;
}
// Password reset.
NSLog(@"Successfully reset password.");
}];
let app = App(id: YOUR_APP_SERVICES_APP_ID)
let client = app.emailPasswordAuth
let email = "forgot.my.password@example.com"
// If Realm app password reset mode is "Send a password reset email",
// we can do so here:
do {
try await client.sendResetPasswordEmail(email)
print("Password reset email sent.")
} catch {
print("Reset password email not sent: \(error.localizedDescription)")
}
// Later...
let newPassword = "mynewpassword12345"
// Token and tokenId are query parameters in the reset password
// link sent in the reset password email.
let token = "someToken"
let tokenId = "someTokenId"
do {
try await client.resetPassword(to: newPassword, token: token, tokenId: tokenId)
print("Password reset successful.")
} catch {
print("Failed to reset password: \(error.localizedDescription)")
}

Al configurar tu aplicación para que ejecute una función de restablecimiento de contraseña, defines la función que debe ejecutarse al llamar a callResetPasswordFunction() desde el SDK. Esta función puede aceptar un nombre de usuario, una contraseña y cualquier número de argumentos adicionales. Puedes usar estos argumentos para especificar detalles como las respuestas a las preguntas de seguridad u otras pruebas que el usuario debe superar para restablecer la contraseña correctamente.

Quizás prefiera usar una función de restablecimiento de contraseña personalizada si desea definir sus propios flujos de restablecimiento de contraseña. Por ejemplo, podría enviar un correo electrónico de restablecimiento de contraseña personalizado desde un dominio específico. O podría usar un servicio distinto del correo electrónico para confirmar la identidad del usuario.

En App Services, define la función de restablecimiento de contraseña personalizada que se ejecuta al llamar a este método. Esta función puede devolver uno de tres estados posibles:

  • fail

  • pending

  • success

Un estado fail se considera un error por el SDK. El SDK callResetPasswordFunction() no toma valores de retorno, por lo que no devuelve un estado pending o success al cliente.

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.

Su función del servidor podría enviar un correo electrónico mediante un proveedor de correo electrónico personalizado. O bien, podría 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 universales.Luego, su aplicación cliente puede llamar resetPassword a para completar el flujo de restablecimiento de contraseña.

let app = App(id: YOUR_APP_SERVICES_APP_ID)
let client = app.emailPasswordAuth
let email = "forgot.my.password@example.com"
let newPassword = "mynewpassword12345"
// The password reset function takes any number of
// arguments.
let args: [AnyBSON] = []
// This SDK call maps to the custom password reset
// function that you define in the backend. In this example,
// we assume your function waits for additional identity
// confirmation. Calling this function only kicks
// off the password reset function. It does not reset the password.
do {
try await client.callResetPasswordFunction(email: email, password: newPassword, args: args)
print("Successfully called the password reset function")
} catch {
print("Password reset failed: \(error.localizedDescription)")
}
// 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.
let token = "someToken"
let tokenId = "someTokenId"
do {
try await client.resetPassword(to: newPassword, token: token, tokenId: tokenId)
print("Password reset successful.")
} catch {
print("Failed to reset password: \(error.localizedDescription)")
}

Si la función de restablecimiento de contraseña de App Services realiza una validación adicional dentro de la función, o si ya validó la identidad del usuario antes de intentar restablecer la contraseña, puede configurar la función de App Services para que success devuelva. 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 success estado.

Llamar a la función en este ejemplo realiza todo el proceso de restablecimiento de contraseña.

let app = App(id: YOUR_APP_SERVICES_APP_ID)
let client = app.emailPasswordAuth
let email = "forgot.my.password@example.com"
let newPassword = "mynewpassword12345"
// 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.
let args: [AnyBSON] = []
// This SDK call maps to the custom password reset
// function that you define in the backend
do {
try await client.callResetPasswordFunction(email: email, password: newPassword, args: args)
print("Password reset successful!")
} catch {
print("Password reset failed: \(error.localizedDescription)")
}

Si no utiliza la sintaxis async/await de Apple, todos estos métodos están disponibles con los controladores de finalización. Este ejemplo muestra cómo registrar un usuario con la sintaxis del controlador de finalización.

let app = App(id: YOUR_APP_SERVICES_APP_ID)
let client = app.emailPasswordAuth
let email = "skroob@example.com"
let password = "password12345"
client.registerUser(email: email, password: password) { (error) in
guard error == nil else {
print("Failed to register: \(error!.localizedDescription)")
return
}
// Registering just registers. You can now log in.
print("Successfully registered user.")
}

Volver

Metadatos del usuario