2016-04-27 9 views
6

こんにちは私はアプリのためのAPIセクションを構築しています。私のすべてのAPI関連コントローラはapp/controllers/apiディレクトリにあります。Railsのいくつかのコントローラのskip_before_action?

私の懸念は、application_controllerにはbefore_action :authenticate_user!のフィルタがあるため、私はログインモードでapiにアクセスする必要があります。

私の現在のソリューション:私は app/controllers/apiディレクトリにあるすべてのコントローラにskip_before_action :authenticate_user!を追加している ..

問題:私はすべてのコントローラで記述する必要があり、私は約80台のコントローラ

持っています

私の期待:私はapplication_controller自体にこの Bのようなものを書くことができます方法はありますefore_action:あなたはその行動に認証されることになっていないすべてのコントローラにskip_before_action :authenticate_user!を指定する必要があります[all the controllers which are in api directory]

+0

http://stackoverflow.com/a/11785449/2231236同様 – Nithin

答えて

2

すべてのコントローラは、APIフォルダの下にある場合は、次のように試すことができます:

class ApplicationController < ActionController::Base 
    before_filter :authenticate! 


    def authenticate! 
    if params[:controller].split("/").first == "api" 
     return true # or put code for what wherever authenticate you use for api 
    else 
     authenticate_user! 
    end 
    end 
end 
+0

あなたは必ず 'のparams [ということです実装:controller] 'には、コントローラの名前だけでなくパスも含まれていますか? –

+1

@ArslanAli、はいコントローラが クラスのように定義されている場合は、パスを取得します。Api :: PasswordsController Thorin

7

:除くauthenticate_user!。 skip_before_actionメソッドへの引数としてコントローラの名前やそのようなものを渡すことはできません。

一つの解決策は次のとおりです。あなたがAPIControllerと呼ばれるコントローラを作ることができ、あなたは次のようにそこにskip_before_actionものを指定することができます。

class APIController < ApplicationController 
    skip_before_action :authenticate_user! 
    # rest of the code 
end 

そしてapp/controllers/api/のすべてのコントローラがAPIControllerから継承することができます。

class OtherController < APIController 
end 
関連する問題