2014-05-25 16 views
6

Sto cercando di richiedere l'accesso su tutte le pagine del mio sito web Rails 4. Nel ApplicationController ho aggiunto before_action :authenticate_user!, ma semplicemente non fa nulla. Ho provato ad aggiungere lo stesso before_action :authenticate_user! a un altro controller e funziona correttamente.Uso di Devise before_action: authenticate_user! non fa nulla

Devo fare qualcos'altro su ApplicationController, per rendere necessario il login su tutte le azioni (eccetto iscrizione/sign in)?

+2

Questo dovrebbe andare bene fintanto che gli altri controller in realtà ereditano da ApplicationController ... – pdobb

risposta

12

Ecco il codice vero e proprio che utilizziamo:

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

Il problema probabilmente avete è duplice:

-

Assicurarsi che i altri controller sono eredita da application_controller:

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

-

Stai in qualche modo "saltare" la before_action callback

Se stai usando skip_before_action da nessuna parte, è necessario rimuoverlo. Probabilmente causerà un problema con il tuo metodo authenticate_user!. Per risolvere questo problema, in primo luogo di prova senza skip_before_action callback, e poi vedere che cosa ottiene funzionare correttamente


Un ulteriore nota - signin/signup non importa. Tutti ereditano dai controller ; correranno come richiesto.

+2

Ho appena scoperto che stavo usando ActionController :: Base invece di ereditare semplicemente da ApplicationController. Sono tornato a scrivere una risposta, ma tu sei venuto prima di me :) – Dofs

+0

lol bene grazie per l'upvote e l'accettazione! Funziona adesso? –

+0

Sì, lo è, grazie :) – Dofs

Problemi correlati