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

如何在Firebase Phone Authentication中自定义短信验证模板?

自定义Firebase Phone Authentication短信模板的方法

一、通过Firebase控制台修改基础模板(仅支持官方占位符)

这是官方提供的基础自定义路径,操作步骤如下:

  • 登录Firebase控制台并进入目标项目
  • 左侧菜单选择Authentication,切换到Sign-in method标签页
  • 找到Phone认证方式,点击右侧的编辑按钮
  • 滚动到SMS template区域,可修改短信内容,但仅能使用官方指定的两个占位符:
    • %LOGIN_CODE%:自动替换为系统生成的验证码
    • %APP_NAME%:自动替换为你的Firebase项目名称
  • 修改完成后点击保存即可生效

注意:此方式无法添加自定义变量,仅能基于官方占位符调整话术。

二、用云函数+自定义逻辑实现个性化模板(支持自定义内容)

如果需要加入应用专属信息(如用户昵称、业务标识等),需通过云函数接管短信发送流程,具体步骤如下:

1. 关闭Firebase自动短信发送

在Firebase控制台的Phone认证设置中,关闭默认的自动短信发送逻辑,避免与自定义流程冲突。

2. 部署云函数生成验证码并发送自定义短信

先初始化云函数项目,再编写如下示例代码:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

// 云函数:生成验证码并发送自定义短信
exports.sendCustomVerificationSms = functions.https.onCall(async (data, context) => {
  const phoneNumber = data.phoneNumber;
  const userCustomData = data.userCustomData; // 传入自定义信息,如用户昵称

  // 生成6位随机验证码
  const verificationCode = Math.floor(100000 + Math.random() * 900000).toString();

  // 将验证码存入实时数据库,设置5分钟过期时间
  await admin.database().ref(`verificationCodes/${phoneNumber}`).set({
    code: verificationCode,
    expiresAt: Date.now() + 5 * 60 * 1000
  });

  // 构造个性化短信内容,可自由加入自定义信息
  const smsContent = `您好${userCustomData.nickname},您的XX应用登录验证码是:${verificationCode}。请在5分钟内完成验证,请勿泄露给他人。`;

  // 调用第三方短信服务商API发送短信(示例用Twilio,需提前配置密钥)
  const twilio = require("twilio");
  const client = twilio(functions.config().twilio.sid, functions.config().twilio.token);
  await client.messages.create({
    body: smsContent,
    from: functions.config().twilio.phoneNumber,
    to: phoneNumber
  });

  return { success: true, message: "验证码已发送" };
});

3. 前端调用云函数触发短信发送

前端不再调用Firebase原生的signInWithPhoneNumber,改为调用自定义云函数:

// 前端示例代码
const sendVerificationCode = async (phoneNumber, userNickname) => {
  const sendCustomSms = firebase.functions().httpsCallable('sendCustomVerificationSms');
  const result = await sendCustomSms({
    phoneNumber: phoneNumber,
    userCustomData: { nickname: userNickname }
  });
  console.log(result.data);
};

4. 验证用户输入的验证码

前端获取用户输入的验证码后,查询数据库验证有效性:

const verifyCode = async (phoneNumber, inputCode) => {
  const codeRef = firebase.database().ref(`verificationCodes/${phoneNumber}`);
  const snapshot = await codeRef.once('value');
  const storedData = snapshot.val();

  if (!storedData || storedData.code !== inputCode || storedData.expiresAt < Date.now()) {
    return { valid: false, message: "验证码无效或已过期" };
  }

  // 验证通过后,可生成自定义令牌完成Firebase登录
  // const customToken = await admin.auth().createCustomToken(uid);

  // 清理已使用的验证码
  await codeRef.remove();

  return { valid: true, message: "验证成功" };
};

注意事项

  • 自定义方式需自行对接第三方短信服务商,Firebase不再承担短信发送职责
  • 需做好验证码的存储安全,设置合理过期时间,验证后及时删除记录
  • 确保云函数的权限配置正确,防止未授权调用

内容的提问来源于stack exchange,提问作者shatlyk-jr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:37:53