Firebase Phone Auth收不到SMS OTP,如何通过WhatsApp发送验证码?
解决Firebase Phone Auth SMS接收问题:WhatsApp发送OTP替代方案
Firebase Phone Auth的设计逻辑是不对外暴露生成的OTP验证码,所以无法直接获取它的OTP并通过WhatsApp发送。你需要搭建自定义OTP验证流程,结合Firebase自定义令牌来实现登录,具体步骤如下:
1. 放弃Firebase自动OTP发送流程
客户端不再使用signInWithPhoneNumber这类自动触发SMS的方法,改为直接收集用户手机号(自行处理格式校验,比如添加国家码),并将其传递到你的后端服务。
2. 后端生成OTP并通过WhatsApp发送
- 后端生成6位(或自定义长度)的随机OTP,将其与用户手机号绑定,存储到数据库中(设置过期时间,建议5分钟,避免重复使用)。
- 调用WhatsBusiness Platform API或第三方WhatsApp消息服务商接口,将OTP发送至用户的WhatsApp账号(注意手机号需符合WhatsApp规范,如
+8613xxxxxxxxx格式)。
3. 后端验证OTP有效性
用户在客户端输入WhatsApp收到的OTP后,将验证码和手机号一同传给后端:
- 后端从数据库查询该手机号对应的有效OTP,对比输入值是否一致。
- 验证通过:使用Firebase Admin SDK的
createCustomToken方法生成自定义令牌(令牌关联的UID可以是你数据库中用户的唯一ID,新用户则生成新UID)。 - 验证失败:返回错误提示,让用户重新输入或重新发送OTP。
4. 客户端用自定义令牌登录Firebase
客户端获取后端返回的自定义令牌后,调用Firebase Auth的signInWithCustomToken方法完成登录,此时用户将被纳入Firebase Auth体系,可正常使用Firebase的其他服务。
关键注意事项
- OTP存储需加密,过期时间严格执行,防止重放攻击。
- 新用户场景下,验证OTP通过后需先在你的数据库创建用户记录,再生成自定义令牌;老用户直接匹配已有记录即可。
- 可保留Firebase Phone Auth作为备选方案,当WhatsApp发送失败时,切换回SMS方式提升容错率。
内容的提问来源于stack exchange,提问作者Mujtaba Fadhil
相关产品推荐
相关产品推荐

