Firebase onCall 函数和 Google Cloud Functions 身份验证显示呼叫未经身份验证

问题描述 投票:0回答:1

几个月前,我部署了一些 onCall Firebase 函数,它们运行良好。

今天我部署了一个新的 onCall Firebase 函数,但无法调用它,出现以下错误:

在 Google Cloud Functions 日志中:

请求未经过身份验证。允许未经身份验证的调用或设置正确的授权标头。如需了解更多信息,请访问 https://cloud.google.com/run/docs/securing/authenticating 其他故障排除文档可在以下位置找到: https://cloud.google.com/run/docs/troubleshooting#unauthorized-client

在客户端(网络浏览器):

从源“http://localhost:5173”获取“https://asia-northeast1-myprojectname.cloudfunctions.net/myfunctionname”的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

我怀疑 CORS 错误只是身份验证失败的结果,而不是直接由于 CORS 设置造成的。

进一步调查这一点,虽然我在 Firebase 控制台中看不到新旧函数之间的差异,但转到 Google Cloud Functions Console 我可以看到新旧函数之间的差异:

在“身份验证”列中,旧的设置为“允许未经身份验证”,而新的设置为“需要身份验证”。

我不记得曾经更改过旧设备的设置,所以我不确定为什么新设备有不同的设置。然而,我的理解是

onCall
函数(与
onRequest
相反)的目的之一是它们自动处理身份验证。我可以在
request.auth
中看到用户的身份验证数据,因此显然已经提供了该数据。在这种情况下,为什么我收到错误消息说请求未经身份验证?如何让客户端在调用云函数时正确验证自身身份?

需要明确的是,在进行函数调用之前,用户已经登录/通过 Firebase 身份验证进行了身份验证。

firebase firebase-authentication google-cloud-functions
1个回答
0
投票

控制台中的身份验证列与它是可调用函数这一事实无关,也与 Firebase 身份验证无关。它指的是完全不同的东西,如果您单击错误消息中提供的链接,您就会发现它。它与 GCP IAM 身份验证有关。

其他设置为公共的功能均已正确设置。可调用函数需要具有 IAM 设置,以便它们在 Web 和移动应用程序中工作。如果您想立即解决此问题,请将身份验证设置更改为公共,就像您的旧函数一样。这涉及将“allUsers”添加到该函数中。请参阅 GCP 文档了解更多信息:https://cloud.google.com/run/docs/authenticating/public

Firebase CLI 应在部署时自动设置。如果没有添加 allUsers,则系统出现问题,您应该联系 Firebase 支持,将此报告为 Firebase CLI 的问题。或者在 firebase-tools 上提出问题。

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.