来自 Firebase Hosting 对 Firebase Function 的请求被 CORS 阻止



我正在尝试在两个设备之间发送推送通知,以获得一个微小的原型。它们都是集成了 firebase SDK 的 Vue.js 应用程序,因此为了实现推送通知流,我部署了一个 firebase 函数,但是当我从任何设备调用它时,会收到 CORS 错误作为响应。

两种设备(

移动设备和桌面设备(具有相同的客户端代码,并且知道彼此的令牌(存储到 Firebase 实时数据库中(。该函数仅使用 Firebase 消息传递来发送推送通知。

火力基地功能:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const cors = require('cors')({ origin: true });
admin.initializeApp();
exports.notification = functions.https.onRequest((req, res) => {
    return cors(req, res, () => {
        if (req.method === "POST") {
            return admin.messaging().send(notification)
                .then(result => {
                    console.log(result);
                    res.status(200).send("ok")
                })
                .catch(err => res.status(500).send(err));
        } else {
            return res.status(400).send("Method not allowed");
        }
    });
});

客户端代码:

send(notification, token) {
    return fetch("https://[zone]-[project].cloudfunctions.net/notifications", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ token, notification })
    });
}

错误是:

Access to fetch at 'https://[zone]-[project].cloudfunctions.net/notifications' from origin 'https://[project].web.app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

你能用functions.https.onCall触发器吗?

请参阅 https://firebase.google.com/docs/functions/callable 。

借助适用于 Firebase 客户端的云函数客户端 SDK,您可以直接从 Firebase 应用调用函数。若要以这种方式从应用调用函数,请在云函数中编写并部署 HTTPS 可调用函数,然后添加客户端逻辑以从应用调用该函数。

我用来调用函数的 URI 是错误的。解决了。对不起这个问题。

相关内容

  • 没有找到相关文章

最新更新