2016-04-27 2 views
6

Merhaba Bir uygulama için bir api bölümü yapıyorum. Tüm api ile ilgili denetleyicilerim app/controllers/api dizininin içinde bulunur.skip_before_action?

Endişem, application_controller numaralı belgede before_action :authenticate_user! numaralı bir filtrenin bulunduğundan, bu nedenle api'ye erişmek için oturum açma modunda olmak zorundayım.

Benim şimdiki çözüm: Ben app/controllers/api dizinde bulunan bütün kontrolörlerin skip_before_action :authenticate_user! ekliyorum ..

Sorun: Ben bütün kontrolörlerin yazmak zorunda ve ben yaklaşık 80 kontrolörleri

var

Beklentim : mi orada ben kendisini application_controller bu b gibi bir şey yazabilirsiniz bir yolu efore_action: authenticate_user !, hariç: [all the controllers which are in api directory]

+0

http://stackoverflow.com/a/11785449/2231236 benzer – Nithin

cevap

2

tüm kontrolörler API klasörü altında iseniz böyle deneyebilirsiniz:

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

Emin params [ 'o Are uygulamak : controller] 'sadece denetleyicinin adını değil, yolu da içeriyor mu? –

+1

@ArslanAli, Denetleyiciler sınıfı Api :: PasswordsController Thorin

7

Kimin eylemleri gerekiyordu değildir kimlik doğrulaması için her denetleyici içinde skip_before_action :authenticate_user! belirtmek gerekir. Denetleyicinin adını veya argüman olarak herhangi bir şeyi skip_before_action yöntemine iletemezsiniz.

bir çözüm şudur: APIController denilen bir denetleyici yapabilir ve orada skip_before_action şeyi belirtmek sevebiliyorsun: app/controllers/api/ de

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

Ve sonra tüm kontrolörler APIController dan devralabilir.

class OtherController < APIController 
end