问题描述
我正在尝试在我们的网站上集成 Google One-Tap 登录。对于后端,我使用的是 Tornado 服务器,该服务器使用 http 库来解析 Cookie 标头并对其进行设置。有关 tornado
cookie 处理 here 的更多信息。基本上,Google One-Tap 登录添加了这个 g_state
cookie 来设置用户如何与 One-Tap 模式 (source) 交互的状态,这是我们无法在不改变功能的情况下改变的行为插件。
现在出于某种原因,当我在 tornado 请求处理程序中调用 self.cookies
时,即使设置了 Cookie
标头,它也会返回空。 cookie 标头如下所示:
Cookie: g_state={"i_l":0}; token="abcde"
由于某种原因,它没有正确解析 cookie 标头。挖出一些代码来解析 tornado 使用的 cookie,并尝试了不同的方法来调查它:
>>> from http.cookies import SimpleCookie
>>> token = 'g_state={"i_l":0};token="abcde"'
>>> dd = SimpleCookie()
>>> dd.load(token)
>>> dd
<SimpleCookie: >
# Now try to rearranged the g_state to appear after token
>>> token2 = 'token="abcde";g_state={"i_l":0}'
>>> dd = SimpleCookie()
>>> dd.load(token2)
>>> dd
<SimpleCookie: token='abcde'>
# added sample token after it to check if it parses the cookies after g_state
>>> token2 = 'token="abcde";g_state={"i_l":0};other_token="hijkl"'
>>> dd = SimpleCookie()
>>> dd.load(token2)
>>> dd
<SimpleCookie: token='abcde'>
# without it
>>> token3 = 'token="abcde"'
>>> dd = SimpleCookie()
>>> dd.load(token3)
>>> dd
<SimpleCookie: token='abcde'>
所以其他 cookie 仍然会被解析,只要它在 g_state
cookie 之前。之后的所有其他内容都无法解析。尝试查找此问题,似乎 http.cookies 库在解析大括号 cookie (source) 上存在问题。
有谁知道如何格式化客户端请求以防止发送 g_state
的 cookie 或至少找到一种方法来不影响它解析 Cookie
标头上的所有其他令牌?就像重新排列 g_state
cookie 以始终结束?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)