手机号登录
手机登录是一种无需密码即可让用户登录网站或应用的认证方式。用户通过短信或WhatsApp等渠道接收一次性密码(OTP)完成认证。
当前WhatsApp
仅作为Twilio和Twilio Verify提供商的渠道被支持。
用户也可以通过原生移动登录使用内置身份提供商进行手机登录。关于Android和iOS的原生移动登录,请参阅社交登录指南。
手机OTP登录可以:
- 提升用户体验:用户无需创建和记忆密码
- 增强安全性:降低密码相关安全漏洞的风险
- 减少支持负担:避免处理密码重置等密码相关流程
To keep SMS sending costs under control, make sure you adjust your project's rate limits and configure CAPTCHA. See the Production Checklist to learn more.
Some countries have special regulations for services that send SMS messages to users, (e.g India's TRAI DLT regulations). Remember to look up and follow the regulations of countries where you operate.
启用手机登录
在托管版Supabase项目中,通过认证提供商页面启用手机认证。
对于自托管项目或本地开发,请使用配置文件。相关配置变量位于auth.sms
命名空间下。
您还需要设置短信服务提供商。每个提供商都有其特定配置。支持的提供商包括MessageBird、Twilio、Vonage和TextLocal(社区支持)。
Configuring SMS Providers
默认情况下,用户每60 seconds只能请求一次OTP,且OTP在1 hour后失效。
使用手机OTP登录
通过OTP(一次性密码)方式,用户无需设置账户密码即可登录。每次登录时都需要验证其手机号码。
123const { , } = await ..({ : '+13334445555',})
用户将收到包含6位验证码的短信,必须在60秒内完成验证。
验证手机OTP
要验证发送到用户手机号的一次性密码(OTP),请调用verifyOtp()
方法并传入手机号和OTP:
您应该向用户展示一个表单,让他们输入6位验证码,然后将验证码与手机号一起发送给verifyOtp
:
12345678const { : { }, ,} = await ..({ : '13334445555', : '123456', : 'sms',})
如果验证成功,用户将被登录并返回一个有效的会话对象:
123456{ "access_token": "<ACCESS_TOKEN>", "token_type": "bearer", "expires_in": 3600, "refresh_token": "<REFRESH_TOKEN>"}
访问令牌(access token)可以作为Bearer令牌放在Authorization头中,用于supabase-js的所有CRUD操作。关于基于用户限制访问的更多信息,请参阅我们的行级安全指南。
更新手机号码
要更新用户的手机号码,用户必须处于登录状态。调用 updateUser()
方法并传入新的手机号码:
123const { , } = await ..({ : '123456789',})
用户将收到包含6位验证码的短信,您必须在60秒内完成验证。在调用verifyOTP
验证时,请使用phone_change
类型来更新用户的手机号码。