新创建的 Firebase 函数抛出未经验证的错误

Tri*_*tan 10 firebase google-cloud-functions

我有一个包含 10 多个云函数的 Firebase 项目。今天我又添加了 3 个,但所有三个新的都抛出了一个错误 UNAUTHENTICATED 没有真正尝试点击函数。(日志中没有函数调用的记录)。自从添加了以前的功能后,我没有对我的环境或 Firebase 项目进行任何更改。

我尝试重新部署项目中的所有功能,三个最新的功能继续失败,而前一个功能正常。我还验证了我使用的是 Node 8,因为使用 Node 10 报告了一些类似的问题。我不确定还可以尝试什么,因为该问题仅适用于新功能。

新函数都有一个相似的签名:

exports.createGroup = functions.https.onCall((data, context) => {
  //Firestore access
});
Run Code Online (Sandbox Code Playgroud)

他们被这样称呼:

const create = functions().httpsCallable('createGroup');
return create({ group: oGroup }).then(result => {
      //Do something
}).catch(err => {
      console.log(err.message); //UNAUTHENTICATED
});
Run Code Online (Sandbox Code Playgroud)

节点版本:8.16.2

Firebase 工具版本:7.6.1

Luk*_*sen 39

2023 年更新

  1. 在 Google Cloud Console 中打开Cloud Functions页面: https://console.cloud.google.com/functions/list
  2. 单击要授予访问权限的功能旁边的复选框。
  3. 单击屏幕顶部的权限。权限面板打开。
  4. 单击添加主体
  5. 新主体字段中,输入allUsers
  6. 选择角色下拉菜单中选择角色Cloud Functions > Cloud Functions Invoker 。
  7. 单击“保存”

  • allUsers 是否包括未经身份验证的用户?即任何人都可以调用我的函数? (5认同)

Gen*_* Bo 11

我在部署多个功能时遇到此错误,并且在上传过程中出现问题,部署似乎已损坏..可能与网络相关,不确定

在 Firebase 控制台中删除有问题的云函数,然后重新成功部署它们后,“FirebaseFunctionsException UNAUTHENTICATED”错误消失了

首先,我尝试重新部署功能,但这还不够,错误继续这样


小智 8

它必须在您的GCP控制台(而不是 Firebase)上解决。只需按照以下步骤操作:

  1. 转到您的GCP Console并登录
  2. 在顶部菜单上,选择相应的 Firebase 项目
  3. 在左侧菜单上转到 Cloud Functions 单击您的函数的复选框(不是函数的名称)
  4. 选择后,在右侧菜单中选择“添加成员”
  5. 在“新成员”上输入 allUsers
  6. 在选择函数栏上,选择 Cloud Functions -> Cloud functions invoker
  7. 单击“保存”,然后在弹出警告中单击“允许公共访问”,您就可以开始了!

  • 有什么方法可以自动化这个吗? (7认同)

Tri*_*tan 7

通过谷歌云文档:

自 2020 年 1 月 15 日起,HTTP 功能默认需要身份验证。您可以指定函数在部署时或部署后是否允许未经身份验证的调用。

解决方案是利用 Google Cloud 控制台(而不是 Firebase 控制台)为allUsers新创建的函数添加权限。

https://cloud.google.com/functions/docs/securing/managing-access-iam#allowing_unauthenticated_function_invocation

  • 我们是否必须永远为每个新功能手动执行此操作? (4认同)
  • 我已经允许访问,但仍然有同样的问题 (3认同)

小智 6

来自第二代 Cloud Functions的文档:

  1. 转到Google Cloud 控制台
  2. 单击要授予访问权限的函数的链接名称。
  3. 单击功能详细信息概览页面右上角的Powered By Cloud Run链接。
  4. 单击“触发器”并选择“允许未经身份验证的调用”
  5. 单击“保存”

在尝试添加 allUsers 并获得“无法将 allUsers 和 allAuthenticatedUsers 类型的主体添加到此资源”之后,我花了很长时间才找到这一点。