【发布时间】:2019-12-24 03:25:07
【问题描述】:
我部署了一个如下所示的云功能:
export const publishVersion = functions
.region("europe-west2")
.https.onCall(async (data, context) => {}
然后在我的网络客户端中,我定义一个函数来调用它:
import { functions } from "firebase";
const callPublishVersion = functions().httpsCallable("publishVersion");
export function publishVersion(
guidelineId: string,
guidelineReference: string
) {
return callPublishVersion({
id: guidelineId,
reference: guidelineReference
});
}
请注意,我包装该函数的唯一原因是在我的客户端中进行严格的输入,但这不是这个问题的重点。
问题是,如果我在本地服务器 (localhost) 上运行 Web 客户端并调用该函数,有两件事似乎出错了。我收到 CORS 错误:
CORS 策略已阻止从源“http://localhost:3000”获取“https://us-central1-my-project.cloudfunctions.net/publishVersion”的访问权限:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。
而且看起来它正在尝试与us-central1 通信,即使我的功能已部署到europe-west2。当我部署 firebase-tools 时告诉我 url 应该是什么:
✔ functions[publishVersion(europe-west2)]: 创建操作成功。 函数网址(publishVersion):https://europe-west2-baymard-gemini-dev.cloudfunctions.net/publishVersion
我在哪里/如何控制以防止出现此 CORS 错误,以及如何将 httpsCallable 定向到不同的区域?
official documentation 没有提及这些。
--- 编辑---
我刚刚发现,如果我将该功能部署到 us-central1,它就可以正常工作。所以 CORS 部分不是问题(我将从标题中删除它),问题变成:如何配置 Web 客户端以调用正确的区域?
--- 编辑---
我在文档中注意到了这一点:
注意:要调用在默认 us-central1 以外的任何位置运行的函数,您必须在初始化时设置适当的值。例如,在 Android 上,您将使用 getInstance(FirebaseApp app, String region) 进行初始化。
这似乎是一个很好的指针,但我不知道如何为 web.xml 配置它。所以我也会在标题中缩小范围。
【问题讨论】:
标签: firebase google-cloud-functions