当前位置: 首页 > 面试题库 >

在Firebase Cloud功能中启用Cors

卞安邦
2023-03-14
问题内容

我已经编写了一些云函数并进行了部署,现在我正尝试使用Angular应用程序访问这些API,但出现此错误

从源’ http:// localhost:4200 ‘
在’xxxxxxxxxxxxxxxxxxxxxxxx’处对X​​MLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:没有’Access-
Control-Allow-Origin’标头在请求的资源上。

我知道我必须在我的云功能中启用cors,但是我从来没有做过,如果你们能告诉我该怎么做,那将是很棒的吗?我确实检查了该线程,但是对于在哪里需要初始化cors以及是否也需要安装其依赖项以及在哪里需要在我的云函数中启用它,我有些困惑。这是我的云功能

const functions = require('firebase-functions');


const admin = require("firebase-admin");

const bodyParser = require("body-parser");


admin.initializeApp();

const db = admin.firestore();

const usersCollection = db.collection("users");

exports.addUser = functions.https.onRequest((req, res) => {
    if (req.body.username != null && req.body.firstname != null && req.body.lastname != null && req.body.addr1 != null && req.body.addr2 != null || req.body.username != undefined && req.body.firstname != undefined && req.body.lastname != undefined && req.body.addr1 != undefined && req.body.addr2 != undefined ) {
        let docId = Math.floor(Math.random() * (99999 - 00000));
        let newUser = {
            "username": req.body.name,
            "firstname": req.body.firstname,
            "lastname": req.body.lastname,
            "addr1": req.body.addr1,
            "addr2": req.body.addr2,
        }
        usersCollection.add(newUser).then(snapshot => {
            res.send(200, {
                "message": "User was successfully created"
            })
        });


    } else {
        res.send(400, {
            "message": "All fields are required"
        })
    }
});

问题答案:

有两种解决方法

  1. 使用外部库处理OPTIONS呼叫

科尔斯

  1. OPTIONS手动处理呼叫

从获取请求方法 headers

检查方法是否 OPTIONS

使用200状态代码解析API 。

 exports.addUser = functions.https.onRequest((req, res) => {

res.set('Access-Control-Allow-Origin', '*');
res.set('Access-Control-Allow-Methods', 'GET, PUT, POST, OPTIONS');
res.set('Access-Control-Allow-Headers', '*');

 if (req.method === 'OPTIONS') {
   res.end();
}

else{
        if (req.body.username != null && req.body.firstname != null && req.body.lastname != null && req.body.addr1 != null && req.body.addr2 != null || req.body.username != undefined && req.body.firstname != undefined && req.body.lastname != undefined && req.body.addr1 != undefined && req.body.addr2 != undefined ) {
            let docId = Math.floor(Math.random() * (99999 - 00000));
            let newUser = {
                "username": req.body.name,
                "firstname": req.body.firstname,
                "lastname": req.body.lastname,
                "addr1": req.body.addr1,
                "addr2": req.body.addr2,
            }
            usersCollection.add(newUser).then(snapshot => {
                res.send(200, {
                    "message": "User was successfully created"
                })
            });


        } else {
            res.send(400, {
                "message": "All fields are required"
            })
        }
}
    });


 类似资料:
  • 我已经编写了一些云函数并部署了它们,现在我正试图使用Angular应用程序来访问这些API,但我得到了这个错误 CORS策略阻止了对“ 我知道我必须在我的云功能中启用cors,但我以前从来没有这样做过,所以如果你们能告诉我怎么做,那将是很棒的?我确实检查了这个线程,但是我有点困惑,我需要在哪里初始化cors,我是否也需要安装它的依赖关系,我需要在哪里在我的云功能中启用它?这是我的云功能

  • 问题内容: 我目前正在学习如何为Firebase使用新的CloudFunctions,而我遇到的问题是我无法访问通过AJAX请求编写的函数。我收到“没有’Access-Control-Allow-Origin’错误”。这是我编写的函数的示例: 该函数位于以下网址中:https : //us-central1-fba- shipper-140ae.cloudfunctions.net/test Fi

  • 我是这样做的: 我做错了什么?我将非常感谢任何帮助。 更新: 道格·史蒂文森的回答有所帮助。添加({origin:true})修复了此问题,我还不得不将更改为,但我一开始完全没有看到。

  • 刚刚完成Hello World谷歌云功能教程,收到以下响应头:

  • 问题内容: 遵循了如何安装GoClipse 的说明。 我写的本地包,内置的东西或GAE的东西都没有发生任何自动完成的事情(按照Wiki的说明,我已将Go src下载到SDK文件夹中)。 我是否可以检查任何设置以确保设置正确?自动完成功能应该在当前版本中工作吗? 问题答案: 正如您链接到的带有AppEngine的GoClipse文章所述: 我们假定读者拥有在其Eclipse环境中运行的GoClips

  • 我有一个包含两个功能的处理应用程序。第一个被称为加载屏幕。第二个叫做主菜单。当应用程序初始化时,它调用函数“loadScreen();”。我在这个函数中设置了一个计时器,这样5秒钟后,它就会跳转到“主菜单”。问题是,如何停止我的函数并调用另一个函数?有没有“Rest”或者我可以使用的“停止”功能?谢谢