2010-01-20 229 views
2

用户登录后,我们将其用户标识存储在会话中。如何在用户未登录时将用户重定向到登录页面

session[:user_id] = user.id 

现在在我们的网站上的所有环节,我们希望用户重定向如果session[:user_id] == nil

我认为它会做的方式是,它会在每个控制器的方法来完成。

def show_customers 
    if session[:user_id] == nil 
    redirect_to (:controller => "authentication", :action => "login") 
    #code related to show_customers goes here 
end 

但是这需要在每个控制器的每个方法中完成。

Rails是否有更理智的方式来做到这一点?

+0

我想我会在每个与身份验证有关的问题上说这个,但我希望您使用的是像清除这样的随时可用的库。如果不是,你应该是! – jonnii 2010-01-20 19:45:25

回答

5

使用before_filter来验证会话是否有效,如果您不想将它放入每个控制器,请将其放入您的application_controller(因为所有控制器都从它继承)。您也可以轻松地通过覆盖控制器中的方法来排除/限制其调用的操作。

+0

或者创建一个管理员控制器并从这个控制器继承'受保护的控制器'。 (当然,将管理控制器中的before_filter和方法) – Veger 2010-01-20 16:35:21

相关问题