手机号码
手机号码插件通过允许用户使用手机号码登录和注册来扩展认证系统。它包括OTP(一次性密码)功能来验证手机号码。
安装
使用方法
发送OTP验证码
要向用户的手机号码发送OTP验证码,您可以使用sendVerificationCode
端点。
验证手机号码
OTP发送后,用户可以通过提供验证码来验证他们的手机号码。
当手机号码被验证后,用户表中的phoneNumberVerified
字段将设置为true
。如果disableSession
未设置为true
,将为用户创建一个会话。此外,如果提供了callbackOnVerification
,它将被调用。
允许使用手机号码注册
要允许用户使用手机号码注册,您可以向插件配置传递signUpOnVerification
选项。它要求您传递getTempEmail
函数来为用户生成临时电子邮件。
使用手机号码登录
除了使用发送-验证流程登录用户外,您还可以使用手机号码作为标识符,并使用手机号码和密码登录用户。
更新手机号码
更新手机号码使用与验证手机号码相同的流程。用户将收到OTP验证码以验证新的手机号码。
然后使用OTP验证码验证新的手机号码。
如果用户会话存在,手机号码将自动更新。
禁用会话创建
默认情况下,插件在验证手机号码后为用户创建会话。您可以通过向verify
方法传递disableSession: true
来禁用此行为。
忘记密码
要使用phoneNumber
启动忘记密码流程,您可以先调用客户端上的forgetPassword
向用户的手机号码发送OTP验证码。
然后,您可以通过使用OTP验证码和新密码调用客户端上的resetPassword
来重设密码。
选项
otpLength
: 要生成的OTP验证码的长度。默认为6
。sendOTP
: 向用户的手机号码发送OTP验证码的函数。它接受手机号码和OTP验证码作为参数。expiresIn
: OTP验证码过期的时间(秒)。默认为300
秒。callbackOnVerification
: 手机号码验证后调用的函数。它接受手机号码和用户对象作为第一个参数,请求对象作为第二个参数。
-
phoneNumberValidator
: 验证手机号码的自定义函数。它接受手机号码作为参数,并返回一个布尔值,指示手机号码是否有效。 -
signUpOnVerification
: 具有以下属性的对象:getTempEmail
: 为用户生成临时电子邮件的函数。它接受手机号码作为参数,并返回临时电子邮件。getTempName
: 为用户生成临时名称的函数。它接受手机号码作为参数,并返回临时名称。
-
requireVerification
: 启用后,用户在验证手机号码之前无法使用手机号码登录。如果未验证的用户尝试登录,服务器将以401错误(PHONE_NUMBER_NOT_VERIFIED)响应,并自动触发OTP发送以启动验证过程。
Schema
该插件需要向用户表添加2个字段
用户表
Field Name | Type | Key | Description |
---|---|---|---|
phoneNumber | string | 用户的手机号码 | |
phoneNumberVerified | boolean | 手机号码是否已验证 |
OTP验证尝试
手机号码插件包含内置保护,防止暴力攻击,方法是限制每个OTP验证码的验证尝试次数。
当用户超过允许的验证尝试次数时:
- OTP验证码会自动删除
- 进一步的验证尝试将返回403(禁止)状态,并显示"尝试次数过多"消息
- 用户需要请求新的OTP验证码才能继续
超过尝试次数后的示例错误响应:
收到403状态时,提示用户请求新的OTP验证码