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

Firebase Admin身份验证不发送短信直接创建用户,如何先完成手机号验证?

解决方案

你现在收不到验证短信是因为Firebase Admin SDK的auth.create_user()接口默认信任你传入的手机号真实性,不会主动触发验证短信发送,Admin SDK本身也没有直接发送手机号验证短信的开放接口。

推荐实现流程

你需要调整整体实现逻辑,前置手机号验证步骤到客户端侧,完整流程如下:

  • 前端(Web/安卓/iOS)集成对应平台的Firebase客户端SDK,用户提交手机号后,前端调用客户端的手机号验证接口触发短信发送
  • 用户收到短信后输入验证码,前端完成验证码校验,拿到验证通过后的ID令牌
  • 前端将ID令牌和其他注册信息提交到你的Python后端
  • 后端先校验ID令牌的合法性,确认手机号已经完成验证后,再调用auth.create_user()创建用户

现有代码优化点

你的当前代码有一个明显错误:firebase_admin.initialize_app(cred) 不能放在接口函数内部,每次请求都会触发重复初始化,直接抛出报错,需要把这部分逻辑挪到项目启动的全局初始化位置,只执行一次。

后端校验+创建用户示例代码

from rest_framework.decorators import api_view, renderer_classes
from rest_framework.renderers import JSONRenderer, TemplateHTMLRenderer
import firebase_admin
from firebase_admin import credentials
from firebase_admin import auth

# 全局初始化,项目启动时执行一次即可
cred = credentials.Certificate('PhoneNumberVerify/firebase-admin.json')
firebase_admin.initialize_app(cred)

@api_view(('POST',))
@renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def CreateUserView(request):
    # 前端传过来的验证通过后的ID令牌
    id_token = request.data.get('id_token')
    try:
        # 校验令牌合法性,同时可以拿到验证过的手机号
        decoded_token = auth.verify_id_token(id_token)
        verified_phone = decoded_token.get('phone_number')
        # 确认手机号已验证
        if not decoded_token.get('phone_verified', False):
            return {"code": 400, "msg": "手机号未验证"}
        # 创建用户
        user = auth.create_user(phone_number=verified_phone)
        return {"code": 200, "msg": "用户创建成功", "uid": user.uid}
    except Exception as e:
        return {"code": 400, "msg": f"校验失败: {str(e)}"}

可选方案:后端自主控制验证流程

如果不想依赖Firebase客户端的验证逻辑,也可以走自定义流程:

  • 后端收到用户提交的手机号后,生成6位随机验证码,调用第三方短信服务商的接口发送验证码
  • 将手机号和验证码的对应关系存入Redis等缓存,设置5-10分钟有效期
  • 用户提交验证码后,后端先比对缓存中的验证码是否匹配,匹配通过后再调用auth.create_user()创建用户,同时可以手动标记手机号已验证:
user = auth.create_user(
    phone_number=phone,
    phone_verified=True # 自己验证过的话可以直接标记为已验证
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 12:30:01