管理电子邮箱/密码用户 — Web SDK
Overview
Web SDK包含一个客户端对象,允许您管理与电子邮件/密码身份验证提供者关联的用户。
注册新用户帐户
若要注册新的电子邮件/密码用户,请使用用户的电子邮件地址和所需的密码调用 registerUser()
方法。该电子邮件地址不得与其他电子邮件/密码用户关联,并且密码必须介于 6 到 128 个字符之间。
const email = "someone@example.com"; const password = "Pa55w0rd!"; await app.emailPasswordAuth.registerUser({ email, password });
确认新用户的电子邮件地址
除非将提供商配置为自动确认新用户,否则新用户必须确认拥有自己的电子邮件地址,然后才能登录您的应用。
如果提供商配置为发送确认电子邮件,则Atlas App Services会在用户注册时自动发送确认电子邮件。 该电子邮件包含已配置 Email Confirmation URL的链接,而该链接附带在此电子邮件发送后30分钟内有效的令牌。 如果用户没有收到初始电子邮件或没有及时点击确认链接,您可以使用 SDK重新发送确认电子邮件。
或者,如果提供商配置为运行确认函数,则Atlas App Services会在用户注册时自动运行自定义Atlas Function 。 如果调用自定义确认函数失败,您可以使用 SDK重试用户确认函数。
完成用户确认
您需要注册用户的有效 token
和 tokenId
,以确认其身份并允许其登录。这些值在不同位置可用,具体取决于提供程序配置:
如果提供程序设置为发送确认电子邮件,则
token
和tokenId
值将作为查询参数包含在Email Confirmation URL中。如果提供商设立为运行确认函数,则
token
和tokenId
值将作为参数传递给该函数。
要确认注册用户,请使用用户的有效 token
和 tokenId
调用 confirmUser()
方法:
await app.emailPasswordAuth.confirmUser({ token, tokenId });
重试用户确认方法
SDK 提供了各种方法,允许重新发送用户确认邮件或重试自定义确认方法。
重新发送确认电子邮件
要将确认电子邮件重新发送给用户,请使用用户的电子邮件地址调用 resendConfirmationEmail()
方法:
const email = "someone@example.com"; // The user's email address await app.emailPasswordAuth.resendConfirmationEmail({ email });
重试用户确认函数
Realm 版本新增:Web v1.4.0
要重新运行自定义确认函数,请使用用户的电子邮件地址调用retryCustomConfirmation()
方法:
const email = "someone@example.com"; // The user's email address await app.emailPasswordAuth.retryCustomConfirmation({ email });
重置用户密码
发送密码重置电子邮件
如果提供商配置为发送密码重置电子邮件,您可以使用 SDK 向用户发送密码重置电子邮件。 该电子邮件包含已配置Password Reset URL的链接。
// The user's email address const email = "joe.jasper@example.com"; await app.emailPasswordAuth.sendResetPasswordEmail({ email });
调用密码重置函数
如果提供程序已配置为运行密码重置功能,则可以使用 SDK 运行该功能。传递包含用户电子邮件和新密码的对象。还可以在 App Services 后端的密码重置功能中纳入其他参数。
// The user's email address const email = "joe.jasper@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 );
完成密码重置
一旦用户通过发送密码重置电子邮件或调用密码重置函数来请求密码重置, Realm就会生成一对唯一的token
和tokenId
值,用户可以使用这对值在30分钟内完成密码重置的初始请求。
await app.emailPasswordAuth.resetPassword({ password: "newPassw0rd", token, tokenId, });
例子
获取令牌和 TokenID
如果提供商使用内置密码重置电子邮件,则token
和tokenId
将作为查询参数包含在密码重置 URL 中。您可使用以下方式进行访问:
const params = new URLSearchParams(window.location.search); const token = params.get("token"); const tokenId = params.get("tokenId"); if (!token || !tokenId) { throw new Error( "You can only call resetPassword() if the user followed a confirmation email link" ); }