0

我需要将 cookie 从“会话”类型更改为“持久”类型。此外,我需要让它与“omniauth-facebook”一起工作。在下面的示例中,一切正常,但是当我使用omniauth 时,cookie 根本没有设置。这是我写的测试代码:

需要“红宝石”
需要'sinatra'
需要'encrypted_cookie'
需要'omniauth-facebook'
使用 Rack::Session::EncryptedCookie, :secret => "fdstopitot9dasdsdasjm4kmt0èu54cmjff83d2'ìel.4j9c"
使用 OmniAuth::Builder 做
  提供者:facebook,'290594154312564','a26bcf9d7e254db82566f31c9d72c94e'
结尾
得到“/”做
  “持久 | 会话 | /auth/facebook”
结尾
得到“/持久”做
  response.set_cookie 'test', {:value=> "persistent", :max_age => 2592000.to_s}
  重定向“/”
结尾
得到“/会话”做
  response.set_cookie 'test', {:value=> "session"}
  重定向“/”
结尾
获取 '/auth/:provider/callback' 做
  response.set_cookie 'test', {:value=> "facebook_callback"}
  重定向“/”
结尾

单击/session/persistent您可以看到 cookie 相应地发生变化(在 Chrome 中,您可以使用 F12 > Resources > Cookies > localhost 检查 cookie)。

/auth/facebook根本没有设置点击cookie。

响应标头似乎没问题(在 Chrome 中,您可以使用 F12 > Network > 标头看到 http 响应标头)。我只用 Chrome 测试过。

HTTP/1.1 302 暂时移动
X 框架选项:SAMEORIGIN
位置:http://localhost:4567/
X-XSS-防护:1;模式=块
内容类型:text/html;charset=utf-8
内容长度:0
设置 Cookie:test=facebook_callback
设置 Cookie: rack.session=X8U8kupLYzIurjMS4pSCQfF%2BzPpjQhJMqyMd84o8BQdQLwmhagL1UkZ4oi7%2F%0A9bEN%2B0FZDDUAeQD%2BRizczwvepQi%2FbcMwaAjpkFcXhiWuJPQ%3D%0A; 路径=/
X-Content-Type-Options: nosniff
连接:保持活动
服务器:thin 1.5.1 代号 Straight Razor

有什么线索吗?

4

1 回答 1

0

是一个小问题,只需添加 cookie 的路径: response.set_cookie 'test', {:value=> "facebook_callback", :path => "/"}

我没有注意到的原因是有一个重定向到“/”,所以 Chrome 只向我显示路径“/”的 cookie。删除重定向后,我注意到我有两个名为“test”的 cookie。一个带有“/”路径,另一个带有“/auth”路径。

于 2013-10-01T09:18:40.743 回答