Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何绕过CORS从Blazor WebAssembly打电话到Firestore?(调用在JavaScript中)_Javascript_Firebase_Google Cloud Firestore_Cors_Blazor Webassembly - Fatal编程技术网

我如何绕过CORS从Blazor WebAssembly打电话到Firestore?(调用在JavaScript中)

我如何绕过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

我正在使用Blazor WebAssembly构建一个简单的登录页面,并利用JSInterop编写JS函数,以便使用Firebase/Firestore。我有一个函数,它使用Firebase方法通过一个简单的自定义表单让用户登录,然后获取id令牌和用户id,然后传递到另一个请求访问Firestore的函数。通过Postman,一切都可以完美运行,但当我在应用程序中运行此过程时,我被CORS错误阻止:

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;
    }
}