随后,在大多数情况下,Railscast #274 - Remember Me在我的Rails应用程序中设置一个 Remember Me令牌,尽管cookie正在"工作",但cookies.permanent[…] = …
和cookies[…] = …
之间似乎没有区别。
奇怪的是,检查Chrome和Safari中的cookie(迄今为止我测试过的所有cookie)分别显示它们在"浏览器关闭"one_answers"会话"时过期。但我可以验证退出和重新启动网站将保留cookie和用户仍然登录!所以,似乎还有别的事情在发生……
我甚至不知道从哪里开始解决这个问题,也没有太多处理Rails cookie和/或行为不端的会话的经验。任何想法?
下面是一些代码:
module SessionsHelper
def sign_in(user)
if params[:remember_me]
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
else
cookies[:remember_token] = user.remember_token
end
end
def current_user
@current_user ||= User.find_by_remember_token!(cookies[:remember_token]) if cookies[:remember_token]
end
...
sessions_controller.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.where('lower(email) = ?', params[:email].downcase).first
if user && user.authenticate(params[:password])
sign_in user
redirect_back_or user
else
flash.now[:error] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
sign_out
redirect_to root_url
end
end
我今天一直在与这个斗争,它碰巧不是Rails相关,而是Chrome的(我猜Opera也是)。自从Chrome的版本19,当选项继续在我离开设置,他们不遵循标准(章节4.3.1),不删除浏览器关闭的任何cookie。因此,"记住我"功能没有像预期的那样工作,因为您希望在关闭浏览器时删除非永久性cookie。这是在WontFix状态下的chromium bug: http://code.google.com/p/chromium/issues/detail?id=128513
在我的情况下(可能是你的),情况更奇怪,因为我没有使用继续在我离开选项,仍然Chrome浏览器关闭时不删除cookie。在发现这个其他错误后,我意识到它实际上是选项继续运行后台应用程序时,谷歌浏览器关闭阻止这些cookie被删除。我不知道/不记得这个选项是如何在我的浏览器中启用的,或者它现在是否是默认行为…
不管怎么说,我的memorber_me复选框现在按预期工作。希望你的问题也解决了,如果没有,至少这个会对你有所帮助。