2014-05-25 5 views
6

Próbuję wymagać logowania na wszystkich stronach na mojej stronie internetowej Rails 4. W ApplicationController dodano before_action :authenticate_user!, ale po prostu nic nie robi. Próbowałem dodać ten sam before_action :authenticate_user! do innego kontrolera i działa dobrze.Używanie Devise before_action: authenticate_user! nic nie robi

Czy muszę zrobić coś innego w aplikacji ApplicationController, aby logowanie było wymagane we wszystkich działaniach (z wyjątkiem rejestracji/logowania)?

+2

To powinno być w porządku, o ile inne kontrolery faktycznie dziedziczą z ApplicationController ... – pdobb

Odpowiedz

12

Oto rzeczywisty kod używamy:

#app/controllers/application_controller.rb 
Class ApplicationController < ActionController::Base 
    #Actions 
    before_action :authenticate_user! #-> routes to the login/signup if not authenticated 
end 

Problem prawdopodobnie masz jest dwojaki:

-

Upewnij się, że inne kontrolery są dziedziczenie z application_controller:

#app/controllers/other_controller.rb 
Class OtherController < ApplicationController 
    ... 
end 

-

pan jakoś "przeskakiwania" The before_action wywołanie zwrotne

Jeśli używasz skip_before_action gdziekolwiek, trzeba ją usunąć. Prawdopodobnie spowoduje to problem z twoją metodą authenticate_user!. Aby rozwiązać ten problem, chciałbym po pierwsze testy bez skip_before_action wywołań zwrotnych, a następnie zobaczyć, co dostaje to działa poprawnie


Kolejna uwaga - signin/signup nie będzie miało znaczenia. Wszyscy dziedziczą od kontrolerów Devise; po prostu będą biegać zgodnie z wymaganiami.

+2

Właśnie dowiedziałem się, że używałem ActionController :: Base zamiast tylko dziedziczenia z ApplicationController. Wróciłem, aby napisać odpowiedź, ale przyszedłeś przede mną :) – Dofs

+0

lol i dzięki za upvote i akceptację! Czy to teraz działa? –

+0

Tak, dziękuję :) – Dofs