我一直在 Rails 4.0.0 中构建一些东西,但我得到了奇怪的会话行为。我有一个将值写入会话的登录过程。它的缺失是我确定用户未登录的方式:
def login
session[:user_id] = user.id
#Then we render a simple page...
end
Run Code Online (Sandbox Code Playgroud)
为了验证我是否有一个有效的用户,我在我的application_controller.rb:
def current_user
logger.info "(current_user) Session ID: #{request.session[:user_id]}"
if session[:user_id] != nil && session[:user_id] != -1
User.find(session[:user_id])
end
end
helper_method :current_user
Run Code Online (Sandbox Code Playgroud)
这是从几个不同的地方调用以检查用户状态并决定如何呈现页面。(!= -1下面解释。)在注销时,我重置了会话:
def logout
reset_session
end
Run Code Online (Sandbox Code Playgroud)
呈现的视图包括对current_user辅助方法的调用以呈现导航。此页面呈现时我的导航部分显示为没有当前用户,并且调试日志显示会话变量已清除。但是,无论我做什么,在下一页上它都会恢复到登录状态,并且我突然再次对用户进行了身份验证,以便current_user从会话中获得正确的值。
我尝试为会话分配不同的值(例如 -1),这具有相同的影响。由于某种原因,我的会话在删除后恢复。此外,当我使用以下内容时:
def logout
reset_session
redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)
索引页面显示为登录用户。这是令人难以置信的烦人。我很感激我可以使用 Devise 等,但这实际上是关于奇怪的会话行为。
我尝试过的事情:
rake tmp:sessions:clear没有效果。