避免 Firebase 可调用函数的 CORS 预检

Jak*_*ake 4 javascript firebase google-cloud-functions

我有一个Firebase 可调用云函数,我在浏览器中的 javascript 应用程序中调用它。

因为请求主机是 ...cloudfunctions.net 而不是我的应用程序域,这会导致在真正的 POST 请求之前出现 CORS 预检 OPTIONS 请求。

如果这是一个带有 http 触发器函数,我会通过在我的托管配置中将我的函数指定为重写并将请求发送到我的应用程序所在的同一个域来避免预检所需的额外时间。

有什么办法可以避免使用 Firebase Callable Cloud Functions 进行这种预检?也许有一种方法可以通过 Firebase Hosting 代理请求,就像使用 http Cloud Functions 一样

Jak*_*ake 7

在梳理了 Firebase 文档和 JS SDK 源代码后,我认为如果不使用/覆盖私有 API,这是不可能的。

我使用的解决方案是复制JS SDK 代码,但指定一个通过 Firebase 托管的 URL,因此它与我的应用在同一个域中。

相同的云功能,相同的应用程序代码,没有 CORS 预检


  1. 创建一个普通的 Firebase 可调用云函数
  2. 添加重写 firebase.json
{
 ...
 "hosting": {
   ...
   "rewrites": [
      {
        "source": "myFunction",
        "function": "myFunction"
      }
   ]
 }
}
Run Code Online (Sandbox Code Playgroud)
  1. 而不是通过firebase.functions().httpsCallable('myFunction')向您自己的新 URL 发送 POST 请求来调用它
{
 ...
 "hosting": {
   ...
   "rewrites": [
      {
        "source": "myFunction",
        "function": "myFunction"
      }
   ]
 }
}
Run Code Online (Sandbox Code Playgroud)

现在 URL 在您的域内,因此没有 CORS 问题