wake-up-neo.com

Rails 5 ActionController :: InvalidAuthenticityToken-Fehler

Ich habe eine Rails-Anwendung, die ich auf Rails 5 aktualisieren möchte. Ich verwende devise (v4.2.0) zusammen mit Rails (v5.0.0). Wie in der README.md-Datei vorgeschlagen, habe ich versucht, "protect_from_forgery" über "before_filter" zu verschieben. Beim Versuch, mich anzumelden oder meinen Fehler zu aktualisieren, wird jedoch ein Fehler angezeigt. ActionController::InvalidAuthenticityToken

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

Und meine andere BugController 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
25
HSD

Hinweis : Diese Antwort hat zwar den gewünschten Effekt, reduziert jedoch die allgemeine Sicherheit. Die nachstehende Antwort von Alon ist korrekter und gewährleistet die Sicherheit der Website. 

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

So was

11
Boltz0r

Wie in Dokumentationen dokumentieren Hinweise für Rails 5

Beachten Sie für Rails 5, dass protect_from_forgery nicht länger vorangestellt ist zur before_action-Kette, wenn Sie authenticate_user.__ eingestellt haben. Vor protect_from_forgery führt Ihre Anforderung zu "Kann nicht CSRF-Tokenauthentizität überprüfen." Um dies zu beheben, ändern Sie entweder die Reihenfolge, in der Sie sie anrufen, oder verwenden Sie protect_from_forgery prepend: true.

62
Alon Burg

Ich habe dies kürzlich ziemlich umfangreich getroffen und fand heraus, dass mein Fehler darin bestand, dass sich der Domänenname meiner Anwendung kürzlich geändert hatte, aber ich habe vergessen, session_store.rb zu aktualisieren. Das kann nicht jedermanns Sache sein, aber es wird dies als CSRF-Fehler gemeldet. Schauen Sie sich also bitte die Datei config/session_store.rb an

3
fuzzygroup

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
0
Yashu Mittal

Diese Entscheidung hat mir geholfen. Ich habe die Entscheidung [von hier] getroffen [1]. Genau wie für mich, den unglücklichen Namen dieses Themas, mit den Schlüsselwörtern des Fehlers bin ich nicht dorthin gekommen, also gebe ich diesen Thread ein, denn hier ist der genaue Name des Fehlers. Ich habe der application_controller.rb-Datei die folgende Zeile "hinzugefügt":

protect_from_forgery with:: null_session

es gibt eine Lösung, in der "REPLACE" -Zeile protect_from_forgery with:: exception steht, falls vorhanden, zu der oben zitierten

 [1]: Rails 4 Authentizitätstoken

0
Vitaliy LiBrus