0

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

我有一个可以正常工作的基本身份验证系统。现在,我只想在用户选中登录表单上的“记住我”复选框时设置一个永久 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……我错过了什么?

谢谢你的帮助

干杯

4

1 回答 1

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'

于 2013-08-16T16:31:16.450 回答