Rails 3.2.11 - 根据复选框设置永久或临时cookie

时间:2013-02-06 12:34:16

标签: ruby-on-rails-3.2 session-cookies

我面临一个基本问题,可能需要新的眼睛来帮助我解决它。

我有一个基本的身份验证系统,工作正常。现在我想设置一个永久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总是被设置,尽管未选中复选框... 我错过了什么?

感谢您的帮助

干杯

1 个答案:

答案 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'