5

Chciałbym prostą metodę w moim kontrolerze aplikacji, która wymaga zalogowania wszystkich użytkowników przed kontynuowaniem jakiejkolwiek części witryny. Używam Devise do uwierzytelniania.Szyny: W kontroler aplikacji wymuszaj logowanie, przekierowuj wszystkie żądania z wyjątkiem logowania

Próbowałem:

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

To skutecznie przekierowuje wszystkich, ale problemem jest to również zapobiega żądania POST niezbędne do utworzenia nowej sesji użytkownika.

Moje pytanie brzmi: w jaki sposób można zablokować wszystkie żądania oprócz widoku logowania i żądania wpisu dotyczącego zalogowania?

Odpowiedz

9

Korzystanie z Devise to łatwe. Musisz tylko dodać before_filter :authenticate_user! do swojego ApplicationController.

To wszystko jest napisane w wiki opracować - https://github.com/plataformatec/devise

Należy zauważyć, że w Rails wersji 4.2 lub nowszej, jest korzystne before_action :authenticate_user!.

+0

Oczywiście. Mam to już w wielu (ale nie wszystkich) kontrolerach ... Myślałem zbyt mocno o tym, jak tymczasowo zablokować całą witrynę i nie zastanawiając się wystarczająco, czy kontroler aplikacji jest zwykłym kontrolerem. Dzięki :) – Andrew

+2

W większości przypadków po prostu wyrzucisz tę linię do ApplicationController, a następnie pominiesz wcześniejszy filtr dla działań, które chcesz wyświetlić na białej liście. – pcg79

Powiązane problemy