【问题标题】:Devise scrubbing Sessions on Post?在帖子上设计擦洗会议?
【发布时间】:2012-04-03 10:46:57
【问题描述】:

我已经设置了设计和基于omniauth 的身份验证,它在大多数情况下都运行良好。登录后,我设置了current_user 并使用before_filter :authenticate_user! 它大部分都按预期工作。即使我(手动)访问其他站点,会话仍然存在。当我回到我的网站时,我仍然处于登录状态。

我在尝试与支付网关提供商集成时遇到了问题。

我向支付网关发送表单,支付网关完成它的工作,然后通过发送表单将用户返回到我的站点。当用户登陆我的网站时,cookies 被清除并且身份验证丢失。这意味着current_user 现在为零。

流程有点像

Order - > Login -> Confirm -> PaymentGateway -> CallBack(MySite) 
   |                 ^
   | -- loggedin --  |
    -----------------

我使用 Firefox 的检查进一步调查,看起来 cookie 设置正确。例如,在我登录后 cookie 是 _session_id:f58b52e6c168178711ba66aa3ac9d637,当我从支付网关返回时,cookie(根据 firefox)是 _session_id:f58b52e6c168178711ba66aa3ac9d637 ..这会让我相信我会保持身份验证。但是,当我打印 current_user 时,我得到了零。

我还在控制器中打印了 cookie,它是正确的:

在我打印得到的 cookie 时的确认操作中

Cookies #<ActionDispatch::Cookies::CookieJar:0x000001017c33d0, @set_cookies={}, @delete_cookies={}, @host="localhost", @secure=true, @closed=false, @cookies={"_session_id"=>"f58b52e6c168178711ba66aa3ac9d637"}>

如果我打印 cookie,在 CallBack(MySite) 页面中,我会得到 ​​p>

Cookies #<ActionDispatch::Cookies::CookieJar:0x0000012b2225f0 @set_cookies={}, @delete_cookies={"remember_user_token"=>{:path=>"/"}}, @host="localhost", @secure=true, @closed=false, @cookies={"_session_id"=>"f58b52e6c168178711ba66aa3ac9d637"}>

我在这里错过了什么。为什么设计故意让我退出。有没有办法让我保持登录状态?

编辑:

我也尝试过记忆...这也不起作用并擦掉cookie。

在我打印得到的 cookie 时的确认操作中

Cookies #<ActionDispatch::Cookies::CookieJar:0x0000012b286fc8 @secret="4ccae7dce24d26dcf98220fb1e54cacf412efe1bf7dc003e1e5315abf50f5c4ep9g6i62b8a9d83cf3501564c7bd70ca7722db85a46015652c3d7fa4f156d4d0b", @set_cookies={}, @delete_cookies={}, @host="localhost", @secure=true, @closed=false, @cookies={"_session_id"=>"f63c3165f807b15e4a4e7de4a615d012", "remember_user_token"=>"BAhbB1sGaQYiIiQyYSQxMCRxVGJoVzEydjJtQ1Y4dndUeTdJMVp1--099213f62d5e317d9f83e758ac5995395e63ce7f"}>

请注意,remember_user_token 已设置

如果我打印 cookie,在 CallBack(MySite) 页面中,我会得到 ​​p>

#<ActionDispatch::Cookies::CookieJar:0x0000012b410100 @secret="4ccae7dce24d26dcf98220fb1e54cacf412efe1bf7dc003e1e5315abf50f5c4ep9g6i62b8a9d83cf3501564c7bd70ca7722db85a46015652c3d7fa4f156d4d0b", @set_cookies={}, @delete_cookies={"remember_user_token"=>{:path=>"/"}}, @host="localhost", @secure=true, @closed=false, @cookies={"_session_id"=>"f63c3165f807b15e4a4e7de4a615d012"}>

所以之前的过滤器删除了remember_user_token cookie,在firefox 的检查中,我可以确认两个cookie 都被发送到站点和rails。

当传入操作是来自外部站点的帖子时,无论哪种方式设计都会将我注销。这是预期的行为,我可以改变它吗?

【问题讨论】:

    标签: ruby ruby-on-rails-3 devise ruby-on-rails-plugins


    【解决方案1】:

    您需要在外部网站发布(或针对该特定操作)时禁用伪造保护请求,否则 Rails 针对 CSRF 攻击的保护机制将(正确地)注销您。

    【讨论】:

    • 谢谢!尝试了很多不同的东西。忘了 CSRF。
    猜你喜欢
    • 2019-01-02
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2011-05-19
    • 2011-06-16
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多