我面临一个基本问题,可能需要新的眼睛来帮助我解决它。
我有一个基本的身份验证系统,工作正常。现在我想设置一个永久cookie,只有当用户检查登录表单上的“记住我”复选框和一个临时cookie(在会话结束时到期)如果未选中“记住我”复选框。
我的SessionsController是
def create
user = User.find_by_email(params[:session][:email])
if user && user.authenticate(params[:session][:password])
if params[:session][:remember_me]
cookies.permanent[:remember_token] = user.remember_token
else
cookies[:remember_token] = user.remember_token
end
sign_in user
redirect_back_or root_path
else
flash.now[:error] = "Invalid email/password combination"
render 'new'
end
端
SessionsHelper是
module SessionsHelper
def sign_in(user)
self.current_user = user
end
问题是永久性cookie总是被设置,尽管未选中复选框... 我错过了什么?
感谢您的帮助
干杯
答案 0 :(得分:0)
您的问题可能在以下一行:
if params[:session][:remember_me]
这可能是一个值为'0'或'1'的字符串,具体取决于是否已选中该复选框。您的if
将被解释为:
if params[:session][:remember_me] != nil
如果它是'0'或'1',那将是真的。请注意,因为一切都是Ruby中的对象,即使它是一个整数,你也会遇到同样的问题。在irb中尝试以下内容:
puts 'Hello World' if 0
剧透 - 它会打印'Hello World'; - )
如果您反而检查它不是'0'那么它应该有效:
if params[:session][:remember_me] != '0'