2016-03-30 13 views
16

Kimlik doğrulama için gerekli olan bir raylar 4.2.x uygulaması var - Birkaç denetleyicim var.Bir önceki hariç tüm denetleyicilerde ve eylemlerde çalışacak şekilde nasıl bir işlem yapabilirim?

Kimlik doğrulaması istemiyorum! Ana denetleyici dizin eylemi dışındaki tüm denetleyiciler ve eylemler üzerinde çalıştırılacak yöntem.

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

Ben de belirli bir grup kısıtlayabilirsiniz: (! Tabii ki, authenticate_user kendisi login gibi eylemleri geçmesi hazırlamak ilgilenir)

Her denetleyici eylem application_controller.rb before_action çalışmasını sağlayabilirsiniz gerçekleşen işlemlerle tüm kontrolörleri arasında:

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

Ama bir istisna olmak sadece eve/index nasıl görmüyorum.

Elbette, her denetleyiciye el ile before_action :authenticate_user! ekleyebilir ve dizin eylemi için ana denetleyiciye bir istisna ekleyebilirim. Fakat bu çok kuru değil ve eğer yeni bir kontrolör eklersem, bu işlem öncesi her birini eklemeyi unutmam gerek.

cevap

38

Yapmanız gereken şey autheticate_user ayarlamaktır!

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

Ve sonra yapmanız sizin HomeController o:

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

Umut bu size yardımcı olacaktır gibi tüm kontrolörler üzerinde!

+0

ApplicationController'da önceden işleminizi bildirdiğinizden emin misiniz? –

+0

nevermind. Sorun şu ki, kimlik doğrulama denetleyicisindeki eylemden önce kendim atlamadım, bu yüzden ne olursa olsun her zaman çalışır. –

İlgili konular