5

我希望我的應用程序控制器中有一個簡單的方法,要求所有用戶在繼續訪問站點的任何部分之前登錄。我正在使用Devise進行身份驗證。Rails:在應用程序控制器中,強制登錄,重定向除登錄以外的所有請求

我想:

class ApplicationController < ActionController::Base 
    ... 
    unless user_signed_in? 
    redirect_to login_path 
    end 
    ... 
end 

這成功地重定向每個人,但問題是,它還會阻止必要建立一個新的用戶會話發佈請求。

所以我的問題是,你會如何去阻止所有請求,除了登錄視圖和登錄請求?

回答

9

使用設計這很容易。您只需將before_filter :authenticate_user!添加到您的ApplicationController。

這是所有在設計維基拼寫 - https://github.com/plataformatec/devise

注意,在Rails的4.2+,before_action :authenticate_user!是首選。

+0

當然是哦。我已經在很多(但不是全部)控制器中擁有過這個功能......我一直在考慮如何臨時鎖定整個站點,而沒有充分考慮應用控制器只是一個常規控制器。謝謝:) – Andrew

+2

大多數情況下,您只需將該行放入ApplicationController中,然後跳過之前的過濾器即可查看要列入白名單的操作。 – pcg79