[英]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.