托管电子邮件/密码用户 - Node.js SDK
注册新用户帐户
要注册新的电子邮件/密码用户,请将用户的电子邮件解决和所需的密码传递给 EmailPasswordAuth.registerUser() 。 该电子邮件解决不得与其他电子邮件/密码用户关联,并且密码必须介于6到128字符之间。
await app.emailPasswordAuth.registerUser({ email: "someone@example.com", password: "Pa55w0rd!", });
确认新用户的电子邮件地址
除非将提供商配置为自动确认新用户,否则新用户必须确认拥有自己的电子邮件地址,然后才能登录您的应用。
完成用户确认
您需要注册用户的有效 token
和tokenId
,以确认其身份并允许其登录。 这些值在不同位置可用,具体取决于提供商配置:
如果提供程序设置为发送确认电子邮件,则
token
和tokenId
值将作为查询参数包含在 Email Confirmation URL中。如果提供商设立为运行确认函数,则
token
和tokenId
值将作为参数传递给该函数。
要确认注册用户,请将有效的token
和tokenId
传递给EmailPasswordAuth.confirmUser()。
const token = "someToken"; const tokenId = "someTokenId"; try { await app.emailPasswordAuth.confirmUser({ token, tokenId }); // User email address confirmed. console.log("Successfully confirmed user."); } catch (err) { console.log(`User confirmation failed: ${err}`); }
重试用户确认方法
SDK 提供了各种方法,允许重新发送用户确认邮件或重试自定义确认方法。
重新发送确认电子邮件
如果提供商配置为发送确认电子邮件,则 Atlas App Services 会在用户注册时自动发送确认电子邮件。 该电子邮件包含已配置Email Confirmation URL的链接,该链接带有有效期为30分钟的令牌。 如果用户没有在该期限内点击链接并确认,则必须请求新的确认电子邮件。
要向用户发送新的确认电子邮件,请将其电子邮件解决传递给EmailPasswordAuth.resendConfirmationEmail()。
const email = "someone@example.com"; await app.emailPasswordAuth.resendConfirmation({ email });
重试用户确认函数
要重新运行自定义确认函数,请使用用户的电子邮件地址调用retryCustomConfirmation()
方法:
const email = "someone@example.com"; await app.emailPasswordAuth.retryCustomConfirmation({ email });
重置用户密码
重置用户密码是一个多步骤的过程。
在客户端应用程序中,您为用户提供一个用于重置密码的用户界面。 然后,您的 App Services App 可以发送电子邮件或运行自定义函数来确认用户的身份。
确认用户身份后,即可完成密码重置请求。
密码重置完成后,用户可以使用新密码登录。
选择您首选的密码重置方法:
您的 Atlas App Services App
Authentication
Authentication Providers
Email/Password - 然后按EDIT按钮
发送密码重置电子邮件
要发送密码重置电子邮件以确认用户身份,您必须将应用配置为发送密码重置电子邮件。
要开始密码重置进程,请使用用户的电子邮件调用EmailPasswordAuth.sendResetPasswordEmail() 。 该电子邮件包含已配置Password Reset URL的链接。 用户必须在30分钟内访问此URL才能确认重置。
const email = "someone@example.com"; await app.emailPasswordAuth.sendResetPasswordEmail({ email });
在用户访问密码重置电子邮件中的 URL 后,使用用户的电子邮件地址、新密码以及唯一 URL 中提供的token
和tokenId
调用EmailPasswordAuth.resetPassword() 。
await app.emailPasswordAuth.resetPassword({ password: "newPassw0rd", token, tokenId, });
如果用户在 30 分钟内没有访问密码重置电子邮件中的 URL, token
和tokenId
则会过期。 您必须再次开始密码重置过程。
调用密码重置函数
当您将应用程序配置为运行密码重置函数时,您可以定义在调用EmailPasswordAuth.callResetPasswordFunction() 时应运行的函数。
此函数可以接受用户名、密码和任意数量的其他参数。 您可以使用这些参数指定用户应传递以成功完成密码重置的详细信息,例如安全问题回答或其他挑战。
如果要定义自己的密码重置流程,您可能更愿意使用自定义密码重置函数。 例如,您可以从特定域发送自定义密码重置电子邮件。 或者,您可以使用电子邮件以外的服务来确认用户的身份。
在 App Services 端,您可以定义在调用此方法时运行的自定义密码重置函数。 该函数可以返回三种可能的状态之一:
fail
pending
success
SDK 将fail
状态视为错误。 SDK callResetPasswordFunction()
不接受返回值,因此它不会向客户端返回pending
或success
状态。
服务器端待处理案例
如果您希望用户采取一些额外步骤来确认其身份,您的Atlas App Services密码重置函数可能会返回 pending
。 但是,该返回值不会传递给 SDK 的callResetPasswordFunction()
,因此您的客户端应用程序必须实现自己的逻辑来处理pending
状态。
const email = "someone@example.com"; // The new password to use const password = "newPassw0rd"; // Additional arguments for the reset function const args = []; await app.emailPasswordAuth.callResetPasswordFunction( { email, password }, args );
您的服务器端函数可能会使用自定义电子邮件提供商发送电子邮件。 或者,您也可以使用短信,通过短信确认用户的身份。
您可以在Atlas App Services密码重置函数上下文中使用 token
和 tokenId
。 如果您通过Atlas App Services密码重置功能传递此信息,则可以使用特定于平台的深度链接或通用链接将这些值传递回您的应用程序。 然后,客户端应用程序可以调用EmailPasswordAuth.resetPassword()来完成密码重置流程。
await app.emailPasswordAuth.resetPassword({ password: "newPassw0rd", token, tokenId, });
服务器端成功案例
如果Atlas App Services密码重置函数在函数内进行了额外验证,或者如果您在尝试重置密码之前已验证用户身份,则可以将Atlas App Services函数配置为返回 success
。 但是,该返回值不会传递给 SDK 的callResetPasswordFunction()
,因此您的客户端应用程序必须实现自己的逻辑来处理success
状态。
调用本示例中的函数会执行整个密码重置过程。
const email = "someone@example.com"; // The new password to use const password = "newPassw0rd"; // Additional arguments for the reset function const args = []; await app.emailPasswordAuth.callResetPasswordFunction( { email, password }, args );