我有一个Firebase 可调用云函数 https://firebase.google.com/docs/functions/callable我在浏览器中的 javascript 应用程序中调用它。
由于请求主机是 ...cloudfunctions.net 而不是我的应用程序域,这会导致在真正的 POST 请求之前出现 CORS 预检选项请求。
如果这是一个带 http 触发器的函数 https://firebase.google.com/docs/functions/http-events我可以通过在托管配置中将我的函数指定为重写并将请求发送到托管我的应用程序的同一域来避免预检所需的额外时间。
有什么方法可以使用 Firebase Callable Cloud Functions 避免这种预检吗?也许有一种方法可以通过 Firebase Hosting 代理请求,例如你可以使用http云功能 https://firebase.google.com/docs/hosting/functions
在梳理了 Firebase 文档和 JS SDK 源代码之后,我决定如果不使用/覆盖私有 API,这是不可能的。
我使用的解决方案是复制JS SDK代码 https://github.com/firebase/firebase-js-sdk/blob/master/packages/functions/src/api/service.ts但指定一个 URL通过 Firebase 托管 https://firebase.google.com/docs/hosting/functions所以它与我的应用程序位于同一域中。
相同的云功能、相同的应用程序代码、无 CORS 预检 ????????
- 创建普通的 Firebase 可调用云函数
- 添加重写
firebase.json
{
...
"hosting": {
...
"rewrites": [
{
"source": "myFunction",
"function": "myFunction"
}
]
}
}
- 而不是用
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 问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)