我具有通用的云功能:
const functions = require('firebase-functions');
const cors = require('cors')({ origin: true });
exports.helloWorld = functions.https.onRequest((request, response) => {
cors(request, response, () => {
res.status(200).send("Hello from Firebase!");
});
});
我正在使用axios从客户端调用它:
axios
.get(
"https://us-central1-dev-imcla.cloudfunctions.net/helloWorld",
)
.then((res) => {
console.log(res);
})
.catch(er=>{
console.log(er);
})
我有2个问题:
在以下位置访问XMLHttpRequest 来自的“ https:// myurl / helloWorld” 来源'http:// localhost:8080'已被CORS政策阻止:否 请求中出现“ Access-Control-Allow-Origin”标头 资源。 xhr.js?b50d:178 GET https://us-central1-dev-imcla.cloudfunctions.net/helloWorld 净:: ERR_FAILED
错误:禁止您的客户端无权获取URL / helloWorld从该服务器。
错误:请求失败,状态码为403 在createError(createError.js?2d83:16) 在解决时(settle.js?467f:17) 在XMLHttpRequest.handleLoad(xhr.js?b50d:61)
问题是我既是经过身份验证的用户,又在云代码中拥有cors软件包。
答案 0 :(得分:1)
需要在您的Cloud Function中将以下内容添加到handle CORS requests:
exports.corsEnabledFunction = (req, res) => {
// Set CORS headers for preflight requests
// Allows GETs from any origin with the Content-Type header
// and caches preflight response for 3600s
res.set('Access-Control-Allow-Origin', '*');
if (req.method === 'OPTIONS') {
// Send response to OPTIONS requests
res.set('Access-Control-Allow-Methods', 'GET');
res.set('Access-Control-Allow-Headers', 'Content-Type');
res.set('Access-Control-Max-Age', '3600');
res.status(204).send('');
} else {
res.send('Hello World!');
}
};
您可以尝试使用此示例。这是guthub repo的完整代码。
答案 1 :(得分:1)
可能与CORS不相关。检查Firebase功能日志以查看代码中是否有任何错误。