托管电子邮件/密码用户 - .NET SDK
Overview
如果您已在应用中启用电子邮件/密码提供商,则可以注册新帐户、确认电子邮件解决以及在客户端代码中重置用户密码。
注册新用户帐户
要注册新用户,请将用户提供的电子邮件和密码传递给RegisterUserAsync()方法:
await app.EmailPasswordAuth.RegisterUserAsync(userEmail, "sekrit");
确认新用户的电子邮件地址
要确认新创建的用户,请将确认 token
和tokenId
传递给ConfirmUserAsync()方法。
注意
在移动应用程序中使用深层链接
移动应用程序可以通过配置 深层链接 直接在应用程序中处理电子邮件确认 在 Android 中, 通用链接 在iOS中,和/或 URI 处理程序 适用于通用Windows平台 (UWP)。
await app.EmailPasswordAuth.ConfirmUserAsync("<token>", "<token-id>");
重新发送确认电子邮件
若要重新发送确认电子邮件,请使用用户的电子邮件地址调用ResendConfirmationEmailAsync()方法。
await app.EmailPasswordAuth.ResendConfirmationEmailAsync("<userEmail>");
重试用户确认函数
要使用自定义函数重新发送确认电子邮件,请使用用户的电子邮件地址调用RetryCustomConfirmationAsync()方法。
await app.EmailPasswordAuth.RetryCustomConfirmationAsync("<userEmail>");
重置用户密码
重置用户密码是一个多步骤的过程。
在客户端应用程序中,您为用户提供一个用于重置密码的用户界面。 然后,您的 App Services App 可以发送电子邮件或运行自定义函数来确认用户的身份。
确认用户身份后,即可完成密码重置请求。
密码重置完成后,用户可以使用新密码登录。
选择您首选的密码重置方法:
您的 Atlas App Services App
Authentication
Authentication Providers
Email/Password - 然后按EDIT按钮
发送密码重置电子邮件
要发送密码重置电子邮件以确认用户身份,您必须将应用配置为发送密码重置电子邮件。
要开始密码重置进程,请使用用户的电子邮件调用SendPasswordResetEmailAsync() 。 App Services会向用户发送电子邮件包含唯一URL的电子邮件。 用户必须在30分钟内访问此URL才能确认重置。
await app.EmailPasswordAuth.SendResetPasswordEmailAsync(userEmail);
密码重置电子邮件包含用两个值token
和tokenId
编码的URL 。 要完成密码重置流程,您可以在客户端或通过调用后端的自定义函数来重置用户的密码。 要使用 SDK 完成密码重置,请将以下值传递给ResetPasswordAsync():
await app.EmailPasswordAuth.ResetPasswordAsync( myNewPassword, "<token>", "<token-id>");
如果用户在 30 分钟内没有访问密码重置电子邮件中的 URL, token
和tokenId
则会过期。 您必须再次开始密码重置过程。
注意
要访问密码重置电子邮件中发送的token
和tokenId
值,您可以使用 Android 深层链接 或 iOS 通用链接。
运行密码重置功能
当您将应用配置为运行密码重置函数时,您可以定义在从 SDK 调用CallResetPasswordFunctionAsync()时应运行的函数。 此函数可以接受用户名、密码和任意数量的其他参数。 您可以使用这些参数指定用户应传递以成功完成密码重置的详细信息,例如安全问题答案或其他挑战。
如果要定义自己的密码重置流程,您可能更愿意使用自定义密码重置函数。 例如,您可以从特定域发送自定义密码重置电子邮件。 您还可以使用电子邮件以外的服务来确认用户的身份。
在 App Services 端,您可以定义在调用此方法时运行的自定义密码重置函数。 该函数可以返回三种可能的状态之一:
fail
pending
success
SDK 将fail
状态视为异常。 SDK CallResetPasswordFunctionAsync()
不接受返回值,因此它不会向客户端返回pending
或success
状态。
服务器端待处理案例
如果您希望用户采取一些额外步骤来确认其身份,您的Atlas App Services密码重置函数可能会返回 pending
。 但是,该返回值不会传递给 SDK 的CallResetPasswordFunctionAsync() ,因此客户端应用程序必须实现自己的逻辑来处理pending
状态。
await app.EmailPasswordAuth.CallResetPasswordFunctionAsync( userEmail, myNewPassword);
您的服务器端函数可能会使用自定义电子邮件提供商发送电子邮件。 您还可以使用短信或其他服务来确认用户的身份。
您可以在Atlas App Services密码重置函数上下文中使用 token
和 tokenId
。 如果您通过Atlas App Services密码重置功能传递此信息,则可以使用特定于平台的深度链接或通用链接将这些值传递回您的应用程序。 然后,客户端应用程序可以调用ResetPasswordAsync()来完成密码重置流程。
await app.EmailPasswordAuth.ResetPasswordAsync( myNewPassword, "<token>", "<token-id>");
注意
要访问权限从自定义密码重置函数发送的token
和tokenId
值,您可以使用 Android 深层链接 或 iOS通用链接。
服务器端成功案例
如果Atlas App Services密码重置函数在函数内进行了额外验证,或者如果您在尝试重置密码之前已验证用户身份,则可以将Atlas App Services函数配置为返回 success
。 但是,该返回值不会传递给 SDK 的CallResetPasswordFunctionAsync() ,因此客户端应用程序必须实现自己的逻辑来处理success
状态。
调用本示例中的函数会执行整个密码重置过程。
await app.EmailPasswordAuth.CallResetPasswordFunctionAsync( userEmail, myNewPassword, "<security-question-1-answer>", "<security-question-2-answer>");