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
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
Wie in Dokumentationen dokumentieren Hinweise für Rails 5
Beachten Sie für Rails 5, dass
protect_from_forgery
nicht länger vorangestellt ist zurbefore_action
-Kette, wenn Sieauthenticate_user
.__ eingestellt haben. Vorprotect_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 Sieprotect_from_forgery prepend: true
.
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
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
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