认证

手机号登录


手机登录是一种无需密码即可让用户登录网站或应用的认证方式。用户通过短信或WhatsApp等渠道接收一次性密码(OTP)完成认证。

用户也可以通过原生移动登录使用内置身份提供商进行手机登录。关于Android和iOS的原生移动登录,请参阅社交登录指南

手机OTP登录可以:

  • 提升用户体验:用户无需创建和记忆密码
  • 增强安全性:降低密码相关安全漏洞的风险
  • 减少支持负担:避免处理密码重置等密码相关流程

启用手机登录

在托管版Supabase项目中,通过认证提供商页面启用手机认证。

对于自托管项目或本地开发,请使用配置文件。相关配置变量位于auth.sms命名空间下。

您还需要设置短信服务提供商。每个提供商都有其特定配置。支持的提供商包括MessageBird、Twilio、Vonage和TextLocal(社区支持)。

Configuring SMS Providers

默认情况下,用户每60 seconds只能请求一次OTP,且OTP在1 hour后失效。

使用手机OTP登录

通过OTP(一次性密码)方式,用户无需设置账户密码即可登录。每次登录时都需要验证其手机号码。

1
2
3
const { , } = await ..({ : '+13334445555',})

用户将收到包含6位验证码的短信,必须在60秒内完成验证。

验证手机OTP

要验证发送到用户手机号的一次性密码(OTP),请调用verifyOtp()方法并传入手机号和OTP:

您应该向用户展示一个表单,让他们输入6位验证码,然后将验证码与手机号一起发送给verifyOtp

1
2
3
4
5
6
7
8
const { : { }, ,} = await ..({ : '13334445555', : '123456', : 'sms',})

如果验证成功,用户将被登录并返回一个有效的会话对象:

1
2
3
4
5
6
{ "access_token": "<ACCESS_TOKEN>", "token_type": "bearer", "expires_in": 3600, "refresh_token": "<REFRESH_TOKEN>"}

访问令牌(access token)可以作为Bearer令牌放在Authorization头中,用于supabase-js的所有CRUD操作。关于基于用户限制访问的更多信息,请参阅我们的行级安全指南

更新手机号码

要更新用户的手机号码,用户必须处于登录状态。调用 updateUser() 方法并传入新的手机号码:

1
2
3
const { , } = await ..({ : '123456789',})

用户将收到包含6位验证码的短信,您必须在60秒内完成验证。在调用verifyOTP验证时,请使用phone_change类型来更新用户的手机号码。