gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:37:24 34 4
gpt4 key购买 nike

我有一个 Firebase Callable Cloud Function我在浏览器的 javascript 应用程序中调用它。

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

如果这是 function with http trigger通过在我的托管配置中将我的函数指定为重写并将请求发送到托管我的应用程序的同一域,我可以避免预检花费的额外时间。

有什么方法可以避免使用 Firebase Callable Cloud Functions 进行预检吗?也许有一种方法可以通过 Firebase 托管来代理请求,例如 you can with http Cloud Functions

最佳答案

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

我使用的解决方案是复制 JS SDK code但指定了一个 URL via Firebase Hosting所以它与我的应用位于同一域中。

相同的 Cloud Function,相同的应用程序代码,没有 CORS 预检 👍🏼


  1. 创建一个普通的 Firebase 可调用云函数
  2. 将重写添加到 firebase.json
{
...
"hosting": {
...
"rewrites": [
{
"source": "myFunction",
"function": "myFunction"
}
]
}
}
  1. 不要使用 firebase.functions().httpsCallable('myFunction') 调用它,而是向您自己的新 URL 发送 POST 请求
const token = await firebase.auth().currentUser.getIdToken()
const response = await fetch(
'https://myapp.web.app/myFunction',
{
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer ' + token
},
method: 'post',
body: JSON.stringify({ data })
}
)

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

关于javascript - 避免 Firebase 可调用函数的 CORS 预检,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55352783/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com