手机号登录
短信验证码登录和注册配置指南
手机号登录使用短信验证码方式,用户输入手机号后收到 6 位验证码,输入即可登录或注册。
个人开发者推荐:使用 阿里云短信认证服务(PNVS) 作为短信服务商。个人实名即可开通,无需企业资质、无需备案签名模板,5000 条验证码短信仅 250 元。详见 阿里云短信。
选择短信服务商
项目支持阿里云短信认证服务、腾讯云短信和 Twilio 三种服务商。个人开发者建议选择阿里云短信认证服务。
开通阿里云短信认证服务
登录 号码认证服务控制台,开通短信认证服务。这个方案属于 PNVS,只用于验证码场景,阿里云会提供系统赠送签名和模板;你不需要自己申请短信签名,也不需要提交模板审核。
获取 AccessKey
登录阿里云控制台后,点击右上角个人账号,在展开菜单里找到 AccessKey。按控制台提示完成安全校验后,创建或复制一组 AccessKey,并立即保存:

| 控制台字段 | 写入的环境变量 |
|---|---|
| AccessKey ID | ALIBABA_CLOUD_ACCESS_KEY_ID |
| AccessKey Secret | ALIBABA_CLOUD_ACCESS_KEY_SECRET |
AccessKey Secret 只会在创建时显示一次,后面无法再次查看。丢失后只能禁用旧密钥,再创建新的 AccessKey。生产环境里更安全的做法是创建 RAM 子用户,只给它短信验证码相关权限,再使用这个子用户的 AccessKey。
配置短信服务
手机号登录只需要能发送验证码短信。推荐优先使用阿里云短信认证服务(PNVS),个人实名即可开通,不需要企业资质,也不需要自建短信签名和模板。
短信属于多个产品可复用的基础能力,默认写入共享配置 packages/config/.env。如果某个产品要使用不同短信账号,再写到对应的 products/<product>/packages/config/.env 覆盖。
# 阿里云短信认证服务(PNVS)
SMS_PROVIDER=aliyun
# 阿里云 AccessKey
ALIBABA_CLOUD_ACCESS_KEY_ID=your-access-key-id
ALIBABA_CLOUD_ACCESS_KEY_SECRET=your-access-key-secret
ALIYUN_SMS_REGION=cn-hangzhou
# PNVS 使用阿里云预置签名和模板,不需要自建短信签名和模板。SMS_PROVIDER=tencent
TENCENT_CLOUD_SECRET_ID=your-secret-id
TENCENT_CLOUD_SECRET_KEY=your-secret-key
TENCENT_SMS_REGION=ap-guangzhou
TENCENT_SMS_SDK_APP_ID=your-sdk-app-id
TENCENT_SMS_SIGN_NAME=your-sign-name
TENCENT_SMS_TEMPLATE_ID=your-template-idSMS_PROVIDER=twilio
TWILIO_ACCOUNT_SID=your-account-sid
TWILIO_AUTH_TOKEN=your-auth-token
TWILIO_FROM_PHONE_NUMBER=+1234567890确认手机号登录路由
手机号登录的 API 路由已内置,无需额外配置。前端页面路径为 /auth/login/phone,API 端点由 Better Auth 的 phoneNumber 插件自动生成。
短信验证码有效期为 5 分钟,允许 3 次验证尝试。手机号验证通过后会自动注册新用户(如果该手机号尚未注册)。手机号格式会通过 @repo/utils 包中的 validateFullPhoneNumber 自动校验,支持国际号码。
完整的短信服务商配置说明(环境变量、模板审核、签名要求等),参见 短信服务。
常见问题
这篇文档有问题?