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

如何在Firebase中限制Functions仅对特定自定义域名开放?

解决方案:单Firebase项目实现自定义域名访问Functions+Auth邮件配置

一、限制Firebase Functions仅通过api.myapp.com访问

1. 绑定自定义域名到Functions

用Firebase CLI执行以下命令绑定域名:

firebase functions:domain:connect api.myapp.com

按照提示完成域名所有权验证(通常是在域名服务商处添加TXT记录),等待DNS生效后,Firebase会自动配置SSL证书。

2. 代码层面拦截非授权域名请求

默认情况下,Firebase提供的*.cloudfunctions.net域名仍能访问你的函数,所以必须在函数代码中添加校验逻辑,检查请求的Host头是否为api.myapp.com:

Node.js 原生函数示例

const functions = require("firebase-functions");

// 域名校验中间件
const checkAllowedDomain = (req, res, next) => {
  const allowedHost = "api.myapp.com";
  if (req.get("Host") !== allowedHost) {
    return res.status(403).send("Forbidden: Only accessible via api.myapp.com");
  }
  next();
};

// 应用校验到目标函数
exports.yourFunction = functions.https.onRequest((req, res) => {
  checkAllowedDomain(req, res, () => {
    // 你的业务逻辑
    res.send("Valid request from api.myapp.com");
  });
});

Express 集成示例(更适合多函数场景)

如果用Express托管Functions,直接把中间件挂载到全局:

const functions = require("firebase-functions");
const express = require("express");
const app = express();

app.use((req, res, next) => {
  const allowedHost = "api.myapp.com";
  if (req.get("Host") !== allowedHost) {
    return res.status(403).send("Forbidden: Invalid domain");
  }
  next();
});

// 定义路由
app.get("/endpoint", (req, res) => {
  res.send("Hello from authorized domain");
});

// 导出Express app为Functions
exports.api = functions.https.onRequest(app);

二、配置Authentication邮件回调使用myapp.com域名

1. 更新Auth回调URL模板

在Firebase控制台进入「Authentication」→「模板」,修改所有邮件模板(如邮箱验证、密码重置)中的回调URL,替换为https://myapp.com/xxx格式的地址(比如密码重置回调设为https://myapp.com/auth/reset-password)。

2. 添加授权域名

进入「Authentication」→「登录方法」→「授权域名」,添加myapp.com和api.myapp.com,避免回调请求被Firebase拦截。

3. 配置自定义SMTP(实现发件人域名myapp.com)

默认Firebase邮件发件人为firebase-noreply@firebase.com,要改成你的域名,需配置自定义SMTP:

  • 进入「Authentication」→「模板」→「自定义SMTP」
  • 填写你的SMTP服务信息(比如SendGrid、Mailgun或自建邮件服务器),设置发件人地址为no-reply@myapp.com(或其他你想用的域名邮箱)
  • 保存后,所有Auth邮件会从你的自定义域名邮箱发送,且邮件内的回调链接均为myapp.com域名。

注意事项

  • 域名绑定后,DNS记录生效可能需要1-24小时,期间可通过firebase functions:domain:list查看状态。
  • 不要依赖Firebase控制台的权限设置拦截原域名访问,因为默认的函数域名仍属于Firebase托管,权限配置无法直接限制Host头,代码校验是最可靠的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:40:48