Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Administrar usuarios

Manage Email/Password Users - 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.

Changed in version 10.16.0: Email/password user APIs add async/await support. Code examples on this page updated to async/await syntax. For an example of the older syntax, see: Email/Password User Examples with Completion Handlers.

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)")
}

New in version 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)")
}

Resetting a user's password is a multi-step process.

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

  2. After confirming the user's identity, you can complete the password reset request.

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

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

After the user has visited the URL from the password reset email, call resetPassword with the user's email, the new password, and the token and tokenId provided in the unique URL.

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.

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.

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:

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

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 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)")
}

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.

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 está utilizando la sintaxis asíncrono/await de Apple, todos estos métodos están disponibles con gestores de finalización. Este ejemplo muestra cómo registrar un usuario usando la sintaxis del gestor 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

User Metadata

En esta página