【发布时间】: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