我正在创建一个与 firebase (和 firestore)集成的 Flutter Web 应用程序:
这些函数是firebase函数v2,有些是http(onRequest),有些是可调用(onCall)。
当我第一次调试 webapp 时,两种函数类型都不起作用。 我为 http 函数提供了一个 corsHandler,这就成功了。 然而,对于可调用函数,我认为不需要 cors 处理。但是我注意到,如果我将功能部署到 us-central1,而不是我的区域 X,它们将按预期工作。如果我将它们部署回我想要的区域,我会在 chrome 控制台中收到此错误(我隐藏了我的应用程序 ID 和函数名称,但其余的正是跟踪):
来自“http://localhost:57768”的 https://us-central1-.cloudfunctions.net/' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:无“访问控制” -Allow-Origin'标头存在于请求的资源上。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。
因此,我认为显而易见的解决方案是让我的 web 应用程序(我正在本地调试)像部署到我的区域一样运行,而不是 us-central1。我看到的所有搜索结果都在谈论 firebase 模拟器,我需要安装这个或那个包......但我怀疑我只是缺少 flutter 方面的一些配置。我怎样才能做到这一点?
对于任何感兴趣的人,我在另一个 stackoverflow 问题中找到了解决方案: Firebase 可调用函数 + CORS
我缺少的是,在我调用函数的客户端,获取特定区域的实例:
FirebaseFunctions.instanceFor(region: 'your-region').httpsCallable('your-function');
而不是
FirebaseFunctions.instance.httpsCallable('your-function');