You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Firebase中使用手机号代替邮箱实现无密码身份验证?

问题解答

Firebase完全支持手机号无密码验证,你当前使用的generate_sign_in_with_email_link是邮箱链接登录的专属接口,确实仅支持邮箱入参,你可以选择以下两种方案实现需求:

方案1:官方原生短信验证码登录(推荐)

这是Firebase Auth原生支持的无密码登录方式,无需自定义开发验证逻辑,实现步骤如下:

  • 前端AngularJS引入Firebase Auth Web SDK,调用signInWithPhoneNumber方法传入用户手机号和reCAPTCHA验证器,Firebase会自动向该手机号发送含6位数字验证码的短信
  • 用户收到验证码后在前端输入,调用验证请求返回的ConfirmationResult实例的confirm方法传入验证码,校验通过即可直接完成登录,全程不需要设置密码
  • 如果你需要在后端校验验证码有效性,可以调用Python Admin SDK的auth.verify_phone_number_verification_code(phone_number, code)方法,校验通过后自行处理会话逻辑即可

方案2:自定义手机号链接登录(和你现有邮箱登录逻辑完全对齐)

如果你想要和邮箱登录一致的「点击短信内链接直接登录」的交互,官方没有原生接口,但可以通过自定义逻辑实现,参考代码如下:

import uuid
import redis
from firebase_admin import auth

# 初始化Redis存储临时token,过期时间设为15分钟
r = redis.Redis(host='localhost', port=6379, db=0)
TOKEN_EXPIRE_SECONDS = 900

def generate_phone_sign_in_link(phone_number):
    # 生成随机唯一的一次性token
    sign_token = str(uuid.uuid4())
    # 存储token与手机号的映射关系,到期自动失效
    r.setex(sign_token, TOKEN_EXPIRE_SECONDS, phone_number)
    # 拼接生成登录链接
    login_link = f'http://localhost:4200/phone-login?token={sign_token}'
    # 此处调用你对接的短信服务,将login_link发送到对应手机号即可
    return login_link

# 前端跳转后校验token的后端逻辑
def verify_phone_sign_token(token):
    phone_number = r.get(token)
    if not phone_number:
        raise Exception("登录链接无效或已过期")
    # 校验通过后获取对应用户,不存在则自动创建
    try:
        user = auth.get_user_by_phone_number(phone_number)
    except auth.UserNotFoundError:
        user = auth.create_user(phone_number=phone_number)
    # 生成Firebase自定义登录token返回给前端
    custom_token = auth.create_custom_token(user.uid)
    # 销毁已使用的token,防止重复调用
    r.delete(token)
    return custom_token

前端拿到自定义token后,调用Firebase Web SDK的signInWithCustomToken(custom_token)即可完成登录。

注意事项

  • 使用原生短信验证码方案时需要配置reCAPTCHA验证,防止恶意请求刷取短信
  • 自定义链接方案需要保证token为单次有效且有效期不超过15分钟,避免链接泄露后被冒用

内容的提问来源于stack exchange,提问作者cuzureau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:09:03