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

为何测试Firebase云函数时浏览器出现认证及403禁止访问问题?

问题原因及解决办法

我之前在使用Firebase Spark免费套餐部署HTTP云函数时,也碰到过完全一样的问题——跳谷歌登录后反而收到403 Forbidden,其实核心问题出在Spark套餐对云函数的默认权限限制上,具体原因和解决办法如下:

核心原因

Spark免费套餐的HTTP云函数默认采用了非常严格的访问控制:

  • 只有Firebase项目的成员账号(也就是你在Firebase控制台「用户和权限」中添加的账号,比如项目所有者、编辑者等角色)才有调用权限。哪怕你用自己的谷歌账号完成了登录,但如果这个账号没被添加到项目成员列表里,依然会被拒绝访问。
  • 此外,Spark套餐不允许匿名访问HTTP云函数,也限制了非Firebase官方服务发起的未授权请求,这也是为什么你登录后还是无法访问的关键。

解决办法

1. 将登录账号添加到项目成员列表

这是最直接的解决方案:

  1. 打开Firebase控制台,点击左上角的项目设置图标(齿轮形状)。
  2. 切换到「用户和权限」标签页,点击「添加成员」。
  3. 输入你用来登录的谷歌邮箱地址,给它分配Cloud Functions Invoker角色(这个角色仅赋予调用云函数的权限,避免过度授权)。
  4. 保存配置后重新访问云函数URL,应该就能正常访问了。

2. 开放权限给所有用户(谨慎操作)

如果你希望让非项目成员的普通用户也能访问云函数,可以调整IAM权限:

  1. 打开与Firebase项目绑定的谷歌云控制台,找到「Cloud Functions」服务。
  2. 选中你的foo函数,切换到「权限」标签页,点击「添加主账号」。
  3. 在「新主账号」输入框中填写allUsers,然后选择「Cloud Functions Invoker」角色并保存。

⚠️ 注意:此设置会让任何人都能访问你的云函数,存在安全风险,而且Spark套餐有每月免费调用次数限制,要警惕恶意刷量的情况。

3. 通过Firebase Auth验证合法用户

如果你的应用本身使用Firebase Authentication,推荐用这种方式来控制访问:
在云函数中添加ID Token校验逻辑,确保只有通过你的应用登录的用户才能访问:

import * as admin from 'firebase-admin';
admin.initializeApp();

export const foo = functions.https.onRequest(async (req, res) => {
  // 从请求头提取ID Token
  const idToken = req.headers.authorization?.split('Bearer ')[1];
  if (!idToken) {
    return res.status(401).send('Unauthorized');
  }
  
  try {
    // 验证Token合法性
    const decodedToken = await admin.auth().verifyIdToken(idToken);
    // 验证通过后执行你的业务逻辑
    res.send('Request processed successfully');
  } catch (error) {
    res.status(403).send('Forbidden: Invalid token');
  }
});

前端请求时,需要先获取当前登录用户的ID Token,然后将其放在请求头的Authorization字段中,格式为Bearer <你的ID Token>。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:00:39