【发布时间】:2019-07-03 22:41:26
【问题描述】:
作为(间接)mentioned in the firebase functions docs,假设 https 函数支持在请求/响应标头中操作 cookie。
如果您需要为 cookie 支持或 CORS 等注入中间件依赖项,请在函数中调用它们。
但是,以下 HTTPS 函数返回一个响应不包含一个set-cookie 标头给客户端:
functions.https.onRequest(async (request, response) => {
response.set('access-control-allow-origin', '*');
response.cookie('TEST COOKIE', 'Success!!!!');
console.log(response.get('set-cookie'));
response.json({ status: 'success' });
});
奇怪的是,对console.log(response.get('set-cookie')) 的调用告诉我set-cookie 标头已在函数调用中设置。因此,不知何故,set-cookie 标头正在从响应中删除。这当然似乎像 firebase 函数实际上并不支持操作 cookie。
有人知道发生了什么吗?我已经想了好几个小时了:(
【问题讨论】:
-
您是否将 Cloud Functions 与 Firebase 托管一起使用。因为在这种情况下,这是预期的行为。见stackoverflow.com/questions/44929653/…
-
@FrankvanPuffelen 阅读了那篇文章后,我仍然不确定“具有云功能的 Firebase 托管”是什么意思。我对 firebase 托管的理解是它是针对静态内容的,所以我不确定托管服务如何与云功能交互。目前,我的代码由开发服务器在本地提供。客户端正在通过 javascript 调用
functions.https.onRequest()函数。所以我要说不,我没有使用带有云功能的 Firebase 托管。 (尽管最终,我希望 SPA 将通过 firebase 托管存储)谢谢。 -
@FrankvanPuffelen 为了更好的衡量标准,我尝试按照该帖子中的建议将
'Cache-Control'设置为'private',并将cookie 名称更改为__session。虽然在对客户端的响应中设置了Cache-Control标头,但仍然缺少set-cookie标头。 -
@FrankvanPuffelen 我终于解决了这个问题!再次感谢您的帮助!
-
很高兴听到约翰的消息!感谢您的自我回答,因为这对于将来遇到此问题的人可能非常有用。
标签: firebase cookies google-cloud-functions