找不到id = 1的用户

时间:2011-12-15 20:21:16

标签: authentication ruby-on-rails-3.1

我有一个current_user方法来处理身份验证。

application_controller.rb

protect_from_forgery
helper_method :current_user

def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
end  

但是当我尝试访问某个页面时,我收到以下错误:

Couldn't find User with id=1
app/controllers/application_controller.rb:10:in `current_user'

如何传递@current_user某种默认值,如果没有用户,则会重定向到登录页面。

感谢您的帮助。

1 个答案:

答案 0 :(得分:12)

您的会话看起来像包含旧数据,特别是不再存在的用户的id(1)。尝试处理ActiveRecord引发的RecordNotFound异常,并返回nil:

def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
    rescue ActiveRecord::RecordNotFound
end  

要重定向,您应该添加第二个before_filter,用于检查用户并处理重定向到登录路径:

before_filter :require_user

def require_user
  redirect_to login_path unless current_user
end

请记住通过将require_user添加到管理您的身份验证的控制器来省略skip_before_filter :require_login的登录操作。