[英]Read cookies in Firebase GCP Functions using Hosting Rewrites
我正在使用 Firebase 函數和 Firebase 托管。 托管將所有流量重定向到我的 function。
請求托管站點(即不是雲 function URL)時,請求 cookies 不可用。 有沒有辦法訪問請求 cookies?
我正在將一個網站遷移到 Firebase,並假設我可以遵循基本的 web 原則,即可以訪問同域 cookies。
const { runWith } = require('firebase-functions');
const cookieParser = require('cookie-parser');
const express = require('express');
const app = express();
app.use(cookieParser());
function handleRequest(req, res) {
res.cookie('firebase1', 'test', {});
if (process.env.HOSTNAME) {
res.cookie('firebase2', 'test', {
domain: process.env.HOSTNAME,
});
}
res.cookie('firebase3', 'test', {
domain: req.hostname,
});
return res.json({
hostname: process.env.HOSTNAME,
'req.cookies': req.cookies, // always empty
'req.headers.cookie': req.headers.cookie, // always undefined
});
}
app.get('*', handleRequest);
app.use(handleRequest);
exports.index = runWith({
timeoutSeconds: 10,
memory: '128MB',
}).https.onRequest(app);
firebase.json
{
"functions": {
"ignore": [
"node_modules",
".git",
"firebase-debug.log",
"firebase-debug.*.log"
]
},
"hosting": {
"public": "public",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"function": "index"
}
]
}
}
我還沒有測試過,但Express API 文檔表明,由於您使用cookie-parser
中間件,您應該執行req.cookies
而不是req.headers.cookie
Firebase 支持團隊的回答:
當將 Firebase 托管與 Cloud Functions 或 Cloud Run 一起使用時,cookies 通常會從傳入請求中剝離。 這對於允許高效的 CDN 緩存行為是必要的。 只有特別命名的 __session cookie 被允許傳遞給您的應用程序的執行。
如果存在,__session cookie 會自動成為緩存鍵的一部分,這意味着具有不同 cookies 的兩個用戶不可能接收到對方的緩存響應。 僅當您的應用根據用戶授權提供不同的內容時,才使用 __session cookie。 此外,您需要將 Cache-Control Header 設置為私有 res.setHeader('Cache-Control', 'private')。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.