2016-07-12 6 views
20

Ich habe eine Rails-Anwendung, die ich auf Schienen 5 aktualisieren möchte. Ich verwende Devise (v4.2.0) zusammen mit Schienen (v5.0.0). Wie in devise README.md Datei vorgeschlagen, habe ich versucht, die protect_from_forgery über dem before_filter bewegen, aber immer noch, wenn ich versuche, meine Fehler, den ich einen Fehler ActionController::InvalidAuthenticityTokenRails 5 ActionController :: InvalidAuthenticityToken Fehler

Mein Application Controller ist

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 

erhalten einzuloggen oder zu aktualisieren, und meine BugController andere ist

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 

Antwort

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

Ich habe versucht, 'skip_before_filter: verify_authenticity_token' in Bugs Controller, aber immer noch nicht funktioniert. – HSD

+0

zeigen Sie mir, wo Sie es setzen – Boltz0r

+0

In 'Bugs Controller' 'protect_from_forgery prepend: true, mit:: Ausnahme before_action: authenticate_user! before_action: set_bug, nur: [: show, bearbeitet,: update] ' – HSD

46

Wie für Rails in Devise documentation Notizen angezeigt 5

Für Rails 5, beachten Sie, dass protect_from_forgery nicht mehr an die before_action Kette vorangestellt, also wenn Sie authenticate_user gesetzt haben vor protect_from_forgery, Ihre Anfrage in „führen Can 't überprüft die Authentizität des CSRF-Tokens. " Um dies zu beheben, ändern Sie entweder die Reihenfolge, in der Sie sie aufrufen, oder verwenden Sie protect_from_forgery prepend: true.

+6

Dies scheint eine bessere Möglichkeit zu sein, als die Verifikation des Echtheitstokens zu überspringen !! – Stephen

+1

Dies sollte die gewählte Antwort sein – Tallboy

1

Ich habe so etwas verwendet und es funktioniert für mich.

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

Ich traf dies vor kurzem in einer ziemlich großen Art und Weise, und ich fand, dass mein Fehler meiner Anwendung Domain-Namen session_store.rb vor kurzem geändert hatten, aber ich habe vergessen zu aktualisieren war. Das mag nicht jedermanns Sache sein, aber es wird dies als CSRF-Fehler melden. Also bitte check out config/session_store.rb