Javascript Firebase CORS XMLHttpRequest已被阻止,无法解决此问题
我已经查看了Firebase关于CORS问题的几乎所有StackOverflow问题,但它们似乎都不起作用 我在Firebase函数上有一些云函数,如果用户经过身份验证,可以上传图像。我有两个文件: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
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,“方法”:[“*”],“来源”:[“*”]}]
即使我现在已经让它工作了,是否应该将其更改为其他内容?