2016-07-12 84 views
20

Possiedo un'applicazione per i binari che sto pianificando di aggiornare ai binari 5. Sto utilizzando devise (v4.2.0) insieme a rails (v5.0.0). Come suggerito nel file di README.md disposizione testamentaria, ho provato a spostare il protect_from_forgery al di sopra del before_filter ma ancora quando sto cercando di effettuare il login o aggiornare il mio errore ho un errore ActionController::InvalidAuthenticityTokenRails 5 ActionController :: InvalidAuthenticityToken error

mio Application Controller è

class ApplicationController < ActionController::Base 
protect_from_forgery with: :exception, prepend: true 
before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:name]) 
    end 

end 

E il mio altro BugController è

class BugsController < ApplicationController 
    protect_from_forgery prepend: true, with: :exception 
    before_action :authenticate_user! 
    before_action :set_bug, only: [:show, :edit, :update] 

    def update 
     respond_to do |format| 
     if @bug.update(bug_params) 
     format.html { redirect_to @bug, notice: 'Bug was successfully updated.' } 
     format.json { render :show, status: :ok, location: @bug } 
    else 
     format.html { render :edit } 
     format.json { render json: @bug.errors, status: :unprocessable_entity } 
    end 
    end 
    end 

private 
def bug_params 
    params.require(:bug).permit(:product, :component, :title, :description, :status_id, :created_by_id, :assigned_to_id) 
end 


end 

risposta

10
class BugsController < ApplicationController 
skip_before_filter :verify_authenticity_token 
protect_from_forgery prepend: true, with: :exception 
before_action :authenticate_user! 
before_action :set_bug, only: [:show, :edit, :update] 
end 

Like This

+0

Ho provato a mettere "skip_before_filter: verify_authenticity_token' nel controller dei bug ma ancora non funziona. – HSD

+0

mostrami dove lo metti – Boltz0r

+0

In 'Controller bug'' protect_from_forgery prepend: true, con:: exception before_action: authenticate_user! before_action: set_bug, solo: [: spettacolo, edit,: update] ' – HSD

46

Come indicato in Devise documentation note per Rails 5

per Rails 5, notare che protect_from_forgery non viene anteposto alla catena before_action, quindi se avete impostato authenticate_user prima protect_from_forgery, la richiesta si tradurrà in "Can 't verifica l'autenticità del token CSRF. " Per risolvere questo, cambiare l'ordine in cui li chiami o utilizzare protect_from_forgery prepend: true.

+6

Sembra un'opzione migliore che saltare la verifica del token di autenticità !! – Stephen

+1

Questa dovrebbe essere la risposta scelta – Tallboy

1

Ho usato qualcosa come questo e funziona per me.

class WelcomeController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :authenticate_model! 
end 
1

Recentemente ho colpito questo in un modo abbastanza grande e ho trovato che il mio errore è stato il nome di dominio mia domanda aveva da poco cambiato, ma ho dimenticato di aggiornare session_store.rb. Questo potrebbe non essere il problema di tutti, ma lo segnalerà come un errore CSRF. Quindi per favore controlla config/session_store.rb

Problemi correlati