gpt4 book ai didi

Firebase https 函数意外剥离 `set-cookie` header

转载 作者:行者123 更新时间:2023-12-02 20:06:06 27 4
gpt4 key购买 nike

作为(间接)mentioned in the firebase functions docs , https 函数假设支持在请求/响应 header 中操作 cookie。

If you need to inject middleware dependencies for things like cookie support or CORS, call these within the function.

但是,以下 HTTPS 函数返回一个响应不包含给客户端的 set-cookie header :

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 header 已设置 在函数调用的那个点。所以不知何故 set-cookie header 被从响应中删除了。这当然看起来就像 firebase 函数实际上并不支持操作 cookie。

有人知道发生了什么事吗?几个小时以来,我一直在努力解决这个问题 :(

最佳答案

我的天哪,我想通了! firebase 函数正在正常设置“set-cookie” header 。问题是双重的:

  1. 与 firebase 函数关联的域是 google 域。您不能为其他域设置函数(这是浏览器限制),因此托管函数不能为本地主机设置 cookie。它也无法为您的应用域设置 cookie(这将不同于与该功能关联的域)。您需要在您自己的域下为该函数设置别名,以便能够为您自己的域设置 cookie(尽管这对开发没有帮助)。看到这个问题:https://stackoverflow.com/a/51461847/5490505 .

  2. 这个真的让我很烦,Google Chrome (v71) 会自动隐藏响应中的“set-cookie” header ,如果它是由另一个域发送的。如果您尝试为应用程序的域设置 cookie,在这种情况下,由于浏览器限制,无论如何都不会设置 cookie。但是,如果您没有指定 cookie 的域,则 cookie 会设置为与该函数关联的域,但 Google Chrome 不会向您显示 header ,您也不知道它是设置,除非您检查浏览器保存的 cookie。这也给人一种 header 甚至没有包含在响应中的感觉。我以为云函数正在剥离“set-cookie” header ,而实际上 Google Chrome 正在剥离“set-cookie” header 。我真的不喜欢这个设计决定。它使调试如此变得非常困难,我在这个问题上浪费了很多时间。 Firefox 按预期运行,向您显示“set-cookie” header 。

我还要指出,出于我的目的,firebase 函数正在设置一个 securehttponly、仅由其他函数读取的 cookie。在这种情况下,将 cookie 的域作为与函数关联的域是完全没问题的(无论如何,我的客户端应用程序从不查看 cookie)。因此,即使 Chrome 没有显示“set-cookie” header ,cookie 正在设置并且一切正常。 Chrome 的设计决定如此糟糕的另一个原因。如此

关于Firebase https 函数意外剥离 `set-cookie` header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54613584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com