2010-01-20 176 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

相關問題