升级到Rails 3.2.2和Devise 2.0.4后,注销操作不会销毁会话。
升级到Rails 3.2.2和Devise 2.0.4后,注销操作不会销毁会话。
升级到rails 3.2.2和Devise 2.0.4后,我无法注销。我没有遇到这个问题,而是点击注销后仍然无法正确退出登录状态,用户对象仍然有效且仍然存在current_user。这是我的日志内容:
Started DELETE "/users/sign_out" for 127.0.0.1 at 2012-03-16 20:54:56 -0400 Processing by Devise::SessionsController#destroy as */* Redirected to http://localhost:3000/ Completed 302 Found in 1ms (ActiveRecord: 0.0ms)
所以,路由是正确的。我尝试重新安装devise,但没有成功。
在调试时,我在模板中插入了以下代码行:
= session.inspect
我发现以下内容:
{"session_id"=>"XXXXXXXXXX4b2aa9600eb3bee9921e05", "warden.user.user.key"=>["User", [1], "$2a$10$3/l/XXXXXXXXXXdhS.KCRe"], "_csrf_token"=>"XXXXXXXXXXVSp805CEN8U+GA4FcSWupcVLPH1RoacE8="}
每次尝试注销后,session_id和_csrf_token会改变,但warden.user.user.key不会改变。(注意我已经把每个字符串的前10个字符替换成了X)。有人能解释这个行为吗?
谢谢!
这个问题的出现原因是升级到Rails 3.2.2和Devise 2.0.4后,注销操作没有销毁会话。解决方法是清除之前版本Devise创建的会话cookie。
解决方法如下:
1. 打开应用程序的config/initializers/session_store.rb文件。
2. 在文件中找到并注释掉以下行:
# YourAppName::Application.config.session_store :cookie_store, key: '_your_app_name_session'
3. 添加以下行来配置新的会话存储方式:
YourAppName::Application.config.session_store :disabled
4. 保存并关闭文件。
5. 重新启动Rails服务器。
这样就成功解决了升级到Rails 3.2.2和Devise 2.0.4后注销操作不销毁会话的问题。