2016-03-30 13 views
16

私はレール4.2.xのアプリケーションを持っています。認証のための工夫をしています - 私はいくつかのコントローラを持っています。before_actionをすべてのコントローラとアクションで実行するにはどうすればよいですか?

私はdevise authenticate_userを望みます!メソッドは、ホームコントローラのインデックスアクション以外のすべてのコントローラおよびアクションで実行されます。

class ApplicationController < ActionController::Base 
    before_action :authenticate_user! 
    ... 
end 

私はまた、特定のセットを制限することができます:私は、すべてのコントローラのアクションがapplication_controller.rbでbefore_actionを実行していることを確認することができます

(!もちろん、authenticate_user自体は、ログインのようなアクションが通過工夫面倒を見ます) すべてコントローラ上のアクション:

class ApplicationController < ActionController::Base 
    before_action :authenticate_user!, except: [:index] 
    ... 
end 

しかし、私はちょうど家/インデックスは例外であることを作る方法を表示されません。

もちろん、コントローラごとに手動でbefore_action :authenticate_user!を追加して、インデックスアクションのホームコントローラに例外を追加することもできます。しかし、これはあまり乾いていません。新しいコントローラーを追加する場合は、このbefore_actionをそれぞれに追加することを忘れないでください。

答えて

38

あなたがしなければならないことは、autheticate_userを設定することです!

class ApplicationController < ActionController::Base 
    before_action :authenticate_user! 
    ... 
end 

そして、あなたはあなたにHomeController上のこと:

class HomeController < ApplicationController 
    skip_before_action :authenticate_user!, only: [:index] 
    ... 
end 

ホープこれはあなたを助けるようなすべてのコントローラに!

+0

あなたはbefore_actionをApplicationControllerに宣言していますか? –

+0

nevermind。問題は、それが自己である認証コントローラのアクションの前にスキップしなかったことです。そのため、何があっても常に実行されます。 –

関連する問題