问题
我在Flutter Web上写了一个应用程序。当我在浏览器中运行它(调试(时,我会得到以下错误:
cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.googleapis.com/identityto...
当我在发布模式下运行它时,我只得到这个:
Error while fetching an original source: NetworkError when attempting to fetch resource.
Source URL: org-dartlang-sdk:///sdk/lib/_internal/js_runtime/lib/js_helper.dart
其他信息
- 应用程序托管在Firebase Hosting中,但错误也发生在没有Firebase的localhost上
- 我认为这两种情况下的问题都很严重,但发布模式的日志较少
我尝试了什么
根据这个文档或这个问题,我必须使用Expressjs添加一些东西,比如:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors({ origin: true }));
- Dart/Flutter中有类似Expressjs的东西吗?我看到了,但我没能让它发挥作用
- 或者还有其他设置标题的方法吗
CORS似乎确实阻止了您使用Firebase存储和访问数据。根据文档配置跨来源资源共享(CORS(:
跨来源资源共享(CORS(是一种允许来自不同来源的资源之间进行交互的机制,这通常是为了防止恶意行为而禁止的。
考虑到这一点,您需要将自己的配置为工作并接受通过HTTP发出的请求。我建议你看一下上面的文档和下面的链接,这样你就可以获得更多关于它的信息
- 在Firebase的云功能中启用CORS
- 通过HTTP请求调用函数
一旦配置了它们,就不应该再面临这两个错误,因为通过HTTP的请求将通过CORS进行授权,并且应该建立对Firebase的访问。
如果这些信息对你有帮助,请告诉我!
所以我和你在同一点上,并不是真的想创建云函数来解决这个问题。我发现有可能在firebase上编辑CORS配置。它非常复杂:
您需要安装gsutil,对其进行授权,然后编辑CORS配置。
你可以在官方的防火基地页面上找到更多