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