管理电子邮箱/密码用户 — Kotlin SDK
当您在Atlas App Services App 中启用电子邮件/密码提供商时,您可以通过注册和登录新用户来从客户端代码处理用户身份验证。
注册新用户
要注册新用户,请将用户提供的电子邮件和密码传递给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) }
确认新用户的电子邮件地址
当您在 中启用 电子邮件/密码提供商 Atlas App Services时,您可以选择一种确认方法。Atlas App Services电子邮件/密码确认服务提供令牌和令牌ID ,您可以通过电子邮件或自定义Atlas Function向用户获取这些令牌和令牌 ID。 要确认用户,请将该令牌和 tokenId 提供给app.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) }
确认用户后,您可以使用电子邮件/密码凭据继续登录。
重试用户确认方法
SDK 提供了各种方法,允许重新发送用户确认邮件或重试自定义确认方法。
重新发送用户确认电子邮件
重新发送确认电子邮件。 每个 URL 中的确认令牌会在30分钟后过期。 如果用户没有在该期限内点击链接并确认,则必须请求新的确认电子邮件。
要重新发送用户确认电子邮件,请向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) }
重试用户确认函数
要重试自定义用户确认函数,请向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) }
重置用户密码
重置用户密码是一个多步骤的过程。
在客户端应用程序中,您为用户提供一个用于重置密码的用户界面。 然后,您的 App Services App 可以发送电子邮件或运行自定义函数来确认用户的身份。
确认用户身份后,即可完成密码重置请求。
密码重置完成后,用户可以使用新密码登录。
有关如何设置首选密码重置方法的更多信息,请参阅Atlas App Services电子邮件/密码身份验证文档。
发送密码重置电子邮件
要发送密码重置电子邮件以确认用户身份,您必须将应用配置为发送密码重置电子邮件。
要开始密码重置过程,请调用app.emailPasswordAuth.sendResetPasswordEmail() 与用户的电子邮件。 Atlas App Services会向用户发送一封包含唯一URL的电子邮件。 用户必须在30分钟内访问此 URL 才能确认重置。
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) }
用户访问密码重置电子邮件中的 URL 后,调用app.emailPasswordAuth.resetPassword() 包含用户的电子邮件、新密码以及唯一 URL 中提供的 token
和tokenId
。
如果用户在 30 分钟内没有访问密码重置电子邮件中的 URL, token
和tokenId
则会过期。 您必须再次开始密码重置过程。
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) }
运行密码重置功能
当您将应用程序配置为运行密码重置函数时,您可以定义在调用app.emailPasswordAuth.callResetPasswordFunction()时应运行的函数 从 SDK。 此函数可以接受用户名、密码和任意数量的其他参数。 您可以使用这些参数指定用户应传递以成功完成密码重置的详细信息,例如安全问题答案或其他挑战。
如果要定义自己的密码重置流程,您可能更愿意使用自定义密码重置函数。 例如,您可以从特定域发送自定义密码重置电子邮件。 或者,您可以使用电子邮件以外的服务来确认用户的身份。
在 App Services 端,您可以定义在调用此方法时运行的自定义密码重置函数。 该函数可以返回三种可能的状态之一:
fail
pending
success
SDK 将fail
状态视为ServiceException
错误。 SDK callResetPasswordFunction()
不会向客户端返回pending
或success
状态。
服务器端待处理案例
如果您希望用户采取一些额外步骤来确认其身份,您的Atlas App Services密码重置函数可能会返回 pending
。 但是,该返回值不会传递给 SDK 的callResetPasswordFunction()
,因此您的客户端应用程序必须实现自己的逻辑来处理pending
状态。
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) }
您的服务器端函数可能会使用自定义电子邮件提供商发送电子邮件。 或者,您也可以使用短信,通过短信确认用户的身份。
您可以在App Services密码重置函数上下文中访问权限 和 。如果您通过App Services密码重置函数传递此信息,则可以使用token
tokenId
Android 中的深层链接 将这些值传递回您的应用 或 iOS中的通用链接 。然后,客户端应用程序可以调用resetPassword()
来完成密码重置流程。
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) }
服务器端成功案例
如果Atlas App Services密码重置函数在函数内进行了额外验证,或者如果您在尝试重置密码之前已验证用户身份,则可以将Atlas App Services函数配置为返回 success
。 但是,该返回值不会传递给 SDK 的callResetPasswordFunction()
,因此您的客户端应用程序必须实现自己的逻辑来处理success
状态。
调用本示例中的函数会执行整个密码重置过程。
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) }
登录或注销用户
注册用户后,用户登录是一个单独的步骤。
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) }
您可以注销经过身份验证的用户。
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() }