使用onCall从Angular 调用Firebase的云函数时出现CORS错误

nc1teljy  于 2023-02-13  发布在  Angular
关注(0)|答案(1)|浏览(156)

当我调用其中一个云函数时,Angular 控制台中出现CORS错误。
CORS策略已阻止访问"https://us-central1-my-project.cloudfunctions.net/myFunction"以从源"http://localhost:4200"获取数据:对印前检查请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头。如果不透明响应满足您的需要,请将请求的模式设置为"no-cors"以在禁用CORS的情况下提取资源。
是否可以通过在Google Cloud Console中设置权限来解决此问题?从 * 控制面板 * 中,依次转至 * 资源 * 和 * 云功能 *。从云功能列表中,单击该功能,转至 * 权限 * 选项卡,单击 * 授予访问权限 *,然后在 * 添加主体 * 下键入allUsers、然后在 * 分配角色 * 下选择 * 云函数 *,然后选择 * 云函数调用程序 *,然后选择 * 保存 *。
工作很好...除了现在我的云函数是公开访问的。
我输入了http://localhost:4200/home而不是allUsers,我的Angular项目正在那里运行。这抛出了一个错误消息:
错误:电子邮件地址和域必须与活动的Google帐户、Google Workspace帐户或云身份帐户关联。
我阅读了Firebase文档配置头文件。这不起作用:

  • Firebase . json *
"hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "headers": [ {
      "source": "/myCloudFunction",
      "headers": [ {
        "key": "Access-Control-Allow-Origin",
        "value": "*"
      } ]
    } ]
  },

this question中的许多答案都没有帮助,因为答案是针对onRequest云函数的,而不是针对onCall云函数的:

const cors = require('cors')({origin: true});

exports.fn = functions.https.onRequest((req, res) => {
    cors(req, res, () => {
        // your function body here - use the provided req and res from cors
    })
});

此云函数已运行数月,今天开始抛出CORS错误。我的其他云函数均未抛出CORS错误。我未对此云函数进行任何更改。我从在Firebase模拟器中运行云函数切换到在Firebase云中运行。我尝试在httpsCallableFromURLhttpsCallable之间切换,但没有帮助。使用httpsCallableFromURL修复了之前在不同云函数中出现的CORS错误。

rggaifut

rggaifut1#

你绝对需要在你的函数上设置allUsers,这样你的网站才能访问它。你所使用的Google Cloud权限只有在客户端使用服务帐户或Google帐户进行身份验证并随请求发送特殊的头文件时才有用,而这里的情况不是这样。如果你需要保护你的函数不被使用,您应该在函数体中为此编写代码,并检查调用者提供的任何形式的身份验证,对于可调用对象,将是Firebase Auth。您还可以使用App Check来帮助验证过程,尽管它不是100%准确。
另见:

相关问题