【问题标题】:Why cookie doesn't work using Sinatra and Omniauth?为什么 cookie 在使用 Sinatra 和 Omniauth 时不起作用?
【发布时间】:2013-09-29 10:18:10
【问题描述】:

我需要将 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

有什么线索吗?

【问题讨论】:

  • 这是一个小问题,只需添加 cookie 的路径: response.set_cookie 'test', {:value=> "facebook_callback", :path => "/"} 我应该删除问题?
  • 您可以发布您的答案并接受它;其他人将来可能会发现它很有用。

标签: session cookies sinatra omniauth rack


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多