Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Javascript Firebase CORS XMLHttpRequest已被阻止,无法解决此问题_Javascript_Node.js_Firebase_Cors_Google Cloud Functions - Fatal编程技术网

Javascript Firebase CORS XMLHttpRequest已被阻止,无法解决此问题

Javascript Firebase CORS XMLHttpRequest已被阻止,无法解决此问题,javascript,node.js,firebase,cors,google-cloud-functions,Javascript,Node.js,Firebase,Cors,Google Cloud Functions,我已经查看了Firebase关于CORS问题的几乎所有StackOverflow问题,但它们似乎都不起作用 我在Firebase函数上有一些云函数,如果用户经过身份验证,可以上传图像。我有两个文件:index.js和user.js index.js中的代码片段: const functions = require("firebase-functions"); const FBAuth = require("./util/fbAuth"); const app = require("express

我已经查看了Firebase关于CORS问题的几乎所有StackOverflow问题,但它们似乎都不起作用

我在Firebase函数上有一些云函数,如果用户经过身份验证,可以上传图像。我有两个文件:
index.js
user.js

index.js
中的代码片段:

const functions = require("firebase-functions");
const FBAuth = require("./util/fbAuth");
const app = require("express")();

const cors = require("cors")({origin: true});
app.use(cors);

// FBAuth gets a bearer token from firebase and authenticates
app.post("/user/image", FBAuth, uploadImage);

exports.api = functions.https.onRequest(app);

来自
user.js

exports.uploadImage = (req, res) => {
  const BusBoy = require('busboy');
  const path = require('path');
  const os = require('os');
  const fs = require('fs');

  const busboy = new BusBoy({ headers: req.headers });

  let imageToBeUploaded = {};

  busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
    if (mimetype !== 'image/jpeg' && mimetype !== 'image/png') {
      return res.status(400).json({ error: 'Wrong file type submitted' });
    }

    const filepath = path.join(os.tmpdir(), filename);
    imageToBeUploaded = { filepath, mimetype };
    file.pipe(fs.createWriteStream(filepath));
  });
  busboy.on('finish', () => {
    admin
      .storage()
      .bucket()
      .upload(imageToBeUploaded.filepath, {
        resumable: false,
        metadata: {
          metadata: {
            contentType: imageToBeUploaded.mimetype
          }
        }
      })
      .then(() => {
        const imageUrl = `https://firebasestorage.googleapis.com/v0/b/${
          config.storageBucket
        }/o/${imageFileName}?alt=media`;
        return db.doc(`/users/${req.user.handle}`).update({ imageUrl });
      })
      .then(() => {
        return res.json({ message: 'image uploaded successfully' });
      })
      .catch((err) => {
        console.error(err);
        return res.status(500).json({ error: 'something went wrong' });
      });
  });
  busboy.end(req.rawBody);
};

前端在Firebase web app托管的redux/React中:

export const uploadImage = (formData) => (dispatch) => {
  dispatch({ type: LOADING_USER });
  axios
    .post("/user/image", formData)
    .then(() => {
      dispatch(getUserData());
    })
    .catch((err) => console.log(err));
};

我所尝试的:

我尝试使用
gsutil cors set cors.json
。问题是我所有的其他功能都可以正常工作,只有当我将图像上传到谷歌存储时,它才会失败

错误:

CORS策略已阻止从源“link.firebaseapp.com”访问位于“cloudfunction/user/image”的XMLHttpRequest:请求的资源上不存在“访问控制允许源”标头

我做错了什么?

根据,
原点:true
表示原点必须与
原点
标题匹配。相反,您可以允许任何原点具有
原点:“*”
,或者保留为空,因为这是默认选项:

const cors = require("cors");
app.use(cors());
根据,
origin:true
表示origin必须与
origin
标题匹配。相反,您可以允许任何原点具有
原点:“*”
,或者保留为空,因为这是默认选项:

const cors = require("cors");
app.use(cors());
你可以试试这个(不带cors)

你可以试试这个(不带cors)


因此,在进行了大量调试并恢复到没有CORS问题的git提交之后,我想我应该向再次出现此问题的任何人提及它

我按照@ariel说的步骤做了,但没有成功。事实证明,当我在
函数中初始化firebase应用程序时,我出现了一个错误,我对此进行了注释以显示:

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

admin.initializeApp();
// const serviceAccount = require("../db.json");

// admin.initializeApp({
//   credential: admin.credential.cert(serviceAccount),
//   databaseURL: "https://myurl.firebaseio.com",
// });

const db = admin.firestore();

module.exports = { admin, db };


老实说,我不知道为什么它以前不起作用,我也不确定这是否是修复方法,但我不会再遇到CORS问题了,所以对于任何其他遇到这个问题的人来说,在它起作用时恢复到提交并从那里开始是一个好的开始

因此,在经过大量调试并恢复到没有CORS问题的git提交之后,我想我应该向再次出现此问题的任何人提及它

我按照@ariel说的步骤做了,但没有成功。事实证明,当我在
函数中初始化firebase应用程序时,我出现了一个错误,我对此进行了注释以显示:

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

admin.initializeApp();
// const serviceAccount = require("../db.json");

// admin.initializeApp({
//   credential: admin.credential.cert(serviceAccount),
//   databaseURL: "https://myurl.firebaseio.com",
// });

const db = admin.firestore();

module.exports = { admin, db };


老实说,我不知道为什么它以前不起作用,我也不确定这是否是修复方法,但我不会再遇到CORS问题了,所以对于任何其他遇到这个问题的人来说,在它起作用时恢复到提交并从那里开始是一个好的开始

仍然收到相同错误:
从源站“link.firebaseapp.com”访问“cloudfunction/user/image”处的XMLHttpRequest已被CORS策略阻止:请求的资源上不存在“Access Control Allow origin”头。
仍然收到相同错误:
从源站访问“cloudfunction/user/image”处的XMLHttpRequest“link.firebaseapp.com”已被CORS策略阻止:请求的资源上不存在“Access Control Allow Origin”标头。
这是google cloud storage/firebase rules/spark plan for firebase的问题吗?您能否运行以下命令查看存储桶的CORS配置并发布输出:`gsutil CORS get gs://[BUCKET_NAME]@marian.vladoi这是出现的:
[{“maxagesonds”:3600,“方法”:[“*”],“来源”:[“*”]}]
即使我现在已经让它工作了,是否应该将其更改为其他内容?这是google cloud storage/firebase rules/spark plan for firebase的问题吗?您能否运行以下命令查看bucket的CORS配置并发布输出:`gsutil CORS get gs://[bucket\u NAME]@marian.vladoi这就是出现的:
[{“maxagesonds”:3600,“方法”:[“*”],“来源”:[“*”]}]
即使我现在已经让它工作了,是否应该将其更改为其他内容?