Managed usuários de e-mail/senha - Swift SDK
Nesta página
- Registrar uma nova conta de usuário
- Confirmar um endereço de e-mail de novo usuário
- Repetir métodos de confirmação do usuário
- Reenviar um e-mail de confirmação do usuário
- Tentar novamente uma função de confirmação do usuário
- Redefinir a senha de um usuário
- Enviar um e-mail de redefinição de senha
- Executar uma função de redefinição de senha
- Métodos de usuário de e-mail/senha com manipuladores de conclusão
When you have enabled the email/password provider in your Atlas App Services app, you can register a new account, confirm an email address, and reset a user's password from client code.
Alterado na versão 10,16,0: As API de usuário de e-mail/senha adicionam suporte assíncrono/await. Exemplos de código nesta página atualizados para a sintaxe assíncrono/aguardar. Para obter um exemplo da sintaxe mais antiga, consulte: Exemplos de usuário de e-mail/senha com manipuladores de preenchimento.
Registrar uma nova conta de usuário
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)") }
Confirmar um endereço de e-mail de novo usuário
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)") }
Repetir métodos de confirmação do usuário
O SDK fornece métodos para reenviar e-mails de confirmação do usuário ou tentar novamente métodos de confirmação personalizados.
Reenviar um e-mail de confirmação do usuário
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.
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)") }
Tentar novamente uma função de confirmação do usuário
Novidade na versão 10.9.0.
Tente novamente uma função de confirmação de usuário 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)") }
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 obter mais informações sobre como definir seu método de redefinição de senha preferido, consulte a documentação de autenticação de e-mail/senha doAtlas App Services .
Enviar um 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 iniciar o processo de redefinição de senha, ligue para sendResetPasswordEmail
com o e-mail do usuário. O App Services envia um e-mail ao usuário que contém uma URL exclusiva. O usuário deve acessar esta URL dentro de 30 minutos para confirmar a redefinição.
Depois que o usuário tiver visitado a URL do e-mail de redefinição de senha, ligue para resetPassword
com o e-mail do usuário, a nova senha e os token
e tokenId
fornecidos na URL exclusiva.
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.
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)") }
Executar uma função de redefinição de senha
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 callResetPasswordFunction() do SDK. 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 da Atlas App Services função de redefinição de senha do , poderá passar esses valores de volta para seu aplicativo usando links universais . Em seguida, seu aplicativo cliente pode chamar resetPassword
para concluir o fluxo de redefinição de senha.
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)") }
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.
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)") }
Métodos de usuário de e-mail/senha com manipuladores de conclusão
Se você não estiver usando a sintaxe async/await da Apple, todos esses métodos estão disponíveis com manipuladores de conclusão. Este exemplo mostra o registro de um usuário com a sintaxe do manipulador de conclusão.
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.") }