我如何绕过CORS从Blazor WebAssembly打电话到Firestore?(调用在JavaScript中)
我正在使用Blazor WebAssembly构建一个简单的登录页面,并利用JSInterop编写JS函数,以便使用Firebase/Firestore。我有一个函数,它使用Firebase方法通过一个简单的自定义表单让用户登录,然后获取id令牌和用户id,然后传递到另一个请求访问Firestore的函数。通过Postman,一切都可以完美运行,但当我在应用程序中运行此过程时,我被CORS错误阻止:我如何绕过CORS从Blazor WebAssembly打电话到Firestore?(调用在JavaScript中),javascript,firebase,google-cloud-firestore,cors,blazor-webassembly,Javascript,Firebase,Google Cloud Firestore,Cors,Blazor Webassembly,我正在使用Blazor WebAssembly构建一个简单的登录页面,并利用JSInterop编写JS函数,以便使用Firebase/Firestore。我有一个函数,它使用Firebase方法通过一个简单的自定义表单让用户登录,然后获取id令牌和用户id,然后传递到另一个请求访问Firestore的函数。通过Postman,一切都可以完美运行,但当我在应用程序中运行此过程时,我被CORS错误阻止: Access to fetch at 'https://firestore.googleapis
Access to fetch at 'https://firestore.googleapis.com/v1/projects/trailblazor-
5ba6f/databases/(default)/documents/users/JJNlKtvGMcUm7MjfkuJy6WdlMiO2' from origin
'https://localhost:44318' has been blocked by CORS policy: Response to preflight request doesn't pass
access control check: It does not have HTTP ok status.
以下是我请求访问Firestore中用户数据的代码(传入id令牌和用户id):
正如您所看到的,我尝试了大量的标题,但到目前为止没有任何效果。甚至我启用的CORS启用Chrome扩展也没有帮助。我曾考虑过制作一个代理服务器,但我不确定这是否有意义。我已经查看了Firebase文档,这应该是我访问Firestore的方式,正如我所说的,Postman(当然)中的一切都是完美的。首先,CORS由服务器管理。在请求中添加一些头并没有帮助。如果允许CORS请求,则服务器根据传入请求的域设置适当的头 关于制作代理服务器,您是对的。您可以使用,它是前端开发人员发出CORS请求的代理服务器。github页面是
async function sendToken(idToken, userId) {
try {
const response = await fetch(`https://firestore.googleapis.com/v1/projects/trailblazor-5ba6f/databases/(default)/documents/users/${userId}`, {
headers: new Headers({
'x-api-key': '**omitted for security**',
'Authorization': 'Bearer ' + idToken,
'Access-Control-Allow-Origin': 'https://localhost:44318',
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Headers': 'Content-Type',
'Content-Type': 'application/json'
}),
mode: 'cors'
});
const receivedResponse = await response.json();
if (receivedResponse != null) {
console.log(receivedResponse);
}
} catch (error) {
return error.message;
}
}