簡體   English   中英

Firebase 授權不記名令牌未注冊

[英]Firebase authorization bearer token not registering

錯誤消息:沒有 Firebase ID 令牌在授權 header 中作為不記名令牌傳遞。 確保您通過提供以下 HTTP header: Authorizaiton: Bearer 或通過傳遞“__session”cookie 來授權您的請求

實際上有一個有效的令牌。 相同的設置適用於其他功能,但不適用於此處。 主要區別在於這是刪除而不是帖子。

    firebase
      .auth()
      .currentUser.getIdToken(true)
      .then((token) => {
        console.log(token)
        return axios.delete(
          `${FunctionsDir}/deleteMessage`,
          {
            messageID: messageID,
          },
          {
            headers: {
              Authorization: `Bearer ${token}`,
              'content-type': 'application/octet-stream',
            },
          }
        )
      })

和 cors 設置...

var corsOptions = {
  origin: function (origin, callback) {
    if (whitelist.indexOf(origin) !== -1 || !origin) {
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  },
  allowedHeaders: 'Content-Type,Authorization',
  methods: 'GET,POST,DELETE',
  preflightContinue: false,
  optionsSuccessStatus: 200,
}

app.options('*', cors())
app.use(cors(corsOptions))

更新:已修復,原來是 cors 東西加上 axios.delete() sig 是錯誤的。

這可能是需要在服務器上解決的CORS問題。

這是因為 DELETE 請求需要向服務器發出飛行前請求,詢問可以發送的內容。 因為您收到了服務器的響應,很可能您已經在Access-Control-Allow-Methods header 中添加了DELETE 但是,默認情況下, Authorization不被視為“安全標頭”。 因此,您還必須明確允許它,否則瀏覽器會在發送請求時將其從請求中刪除。 您可以通過向Access-Control-Allow-Headers header 添加Authorization來完成此操作。

如果您在服務器上使用 Express,您可以允許cors package 為您執行此操作:

import express from "express";
import cors from "cors";

const app = express();
app.options("/deleteMessage", cors()); // enable preflight request for DELETE
app.use(cors({ origin: ["https://yourapp.com"] })); // enable CORS for all routes

// ...

如果您不喜歡使用第三方依賴項,您可以手動添加標題,如this answer所示。

對於非快速請求,例如 HTTP 請求雲 Function,您可以使用以下代碼:

import express from "express";
import cors from "cors";

const corsMiddleware = cors({ origin: ["https://yourapp.com"] }); // or your manual (req, res, next) function

export const someFunction = functions.https.onRequest((req, res) => {
  corsMiddleware(req, res, (err) => {
    if (err) {
      res.status(500).send('CORS check failed');
      return;
    }

    // your code here
  }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM