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

Firebase Auth邮件验证模板%APP_NAME%多站点显示异常问题咨询

Firebase 多站点共用项目时自定义验证邮件APP_NAME的解决方案

Firebase出于安全限制,确实不允许修改系统自动发送的验证邮件模板中的变量映射逻辑——同一项目下所有应用的验证邮件,默认都会使用项目级别的显示名称(也就是你主站x设置的那个),哪怕创建了多个子应用,%APP_NAME%也不会自动替换为对应应用的昵称,这是当前的产品限制。

针对你多站点共用项目的场景,提供以下可行解决方案:

1. 自定义验证邮件+云函数触发发送(推荐)

放弃Firebase系统默认的验证邮件,完全自定义邮件内容和发送逻辑,实现站点名称的动态替换:

  • 步骤:
    1. 在Firebase控制台关闭自动发送验证邮件:进入「Authentication > 模板 > 电子邮件地址验证」,关闭「自动发送」开关。
    2. 编写Cloud Function,监听用户创建事件,生成验证链接并发送自定义邮件:
      • 注册时通过自定义用户属性标记用户所属站点(比如前端注册成功后调用auth.setCustomUserClaims添加siteName声明)。
      • 云函数中读取该属性,动态替换邮件中的站点名称,无需依赖%APP_NAME%变量。
    3. 示例代码(简化版):
      const functions = require("firebase-functions");
      const admin = require("firebase-admin");
      admin.initializeApp();
      const nodemailer = require("nodemailer");
      
      // 配置邮件发送服务(可替换为SMTP、SendGrid等)
      const transporter = nodemailer.createTransport({
        service: "SendGrid",
        auth: {
          user: "apikey",
          pass: functions.config().sendgrid.key
        }
      });
      
      exports.sendCustomVerificationEmail = functions.auth.user().onCreate(async (user) => {
        // 获取用户自定义的站点名称,默认值可根据需求调整
        const userRecord = await admin.auth().getUser(user.uid);
        const siteName = userRecord.customClaims?.siteName || "你的站点";
        
        // 生成Firebase官方验证链接
        const verificationLink = await admin.auth().generateEmailVerificationLink(user.email);
      
        const mailOptions = {
          from: "你的发件邮箱 <no-reply@yourdomain.com>",
          to: user.email,
          subject: `请验证你的邮箱 - ${siteName}`,
          html: `
            <p>你好,</p>
            <p>请点击下方链接完成邮箱验证:</p>
            <a href="${verificationLink}">立即验证</a>
            <p>如果这不是你的操作,请忽略此邮件。</p>
            <p>${siteName} 团队</p>
          `
        };
      
        return transporter.sendMail(mailOptions);
      });
      

2. 拆分独立Firebase项目(适合业务独立性高的场景)

如果多个站点的业务耦合度低,可以为每个站点创建独立的Firebase项目:

  • 每个项目单独设置显示名称,系统默认的验证邮件会自动使用对应项目的名称,无需额外开发。
  • 缺点:项目间用户数据不互通,若需要共享用户体系,需额外开发用户同步逻辑,运维成本会增加。

不推荐的折中方案

尝试修改模板占位符后前端替换的方案不可行——因为验证邮件由Firebase后台直接发送,前端无法干预邮件内容的生成和替换,因此不建议浪费时间在这类hack方法上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:38:19