Deaktivieren Sie den CSRF-Token in Schienen 3

105

Ich habe eine Rails-App, die einige APIs für eine iPhone-Anwendung bereitstellt. Ich möchte in der Lage sein, einfach auf einer Ressource zu posten, ohne darauf zu achten, das richtige CSRF-Token zu erhalten. Ich habe einige Methoden ausprobiert, die ich hier im Stackoverflow sehe, aber es scheint, dass sie auf Schienen 3 nicht mehr funktionieren.

Danke, dass du mir geholfen hast.

Simone D'Amico
quelle

Antworten:

175

In der Steuerung, in der Sie CSRF deaktivieren möchten, wird Folgendes überprüft:

skip_before_action :verify_authenticity_token

Oder um es für alles außer ein paar Methoden zu deaktivieren:

skip_before_action :verify_authenticity_token, :except => [:update, :create]

Oder um nur bestimmte Methoden zu deaktivieren:

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update]

Weitere Informationen: RoR Request Forgery Protection

Mike Lewis
quelle
1
Dies ist die richtige Antwort für Apps, die eine Mischung aus regulären, über den Browser zugänglichen Formularen und API-Endpunkten enthalten. Die Antwort von Markus Proske wäre richtig, wenn Sie absolut sicher wären, dass Ihre App keine über den Browser zugänglichen Formulare enthält.
Asfand Qazi
Wohin geht das genau? Was ist, wenn der Controller Teil eines Edelsteins ist?
Werfen Sie Konto weg
Darf ich Sie fragen, ob Sie diese sehr ähnliche Frage beantworten können? stackoverflow.com/questions/50159847/…
105

In Rails3 können Sie das csrf-Token in Ihrem Controller für bestimmte Methoden deaktivieren:

protect_from_forgery :except => :create 
Markus Proske
quelle
12
Beachten Sie beim Lesen, dass dies der Fall sein sollte ApplicationController. Die Antwort von Mike Lewis unten ( skip_before_filter :verify_authenticity_token) lautet, wie es auf Controller-Basis deaktiviert werden kann, vorausgesetzt, der Controller erbt von ApplicationController.
NudeCanalTroll
Dies scheint unsicher zu sein stackoverflow.com/questions/10676018/… . Was denken Sie? ist es?
Websites
@NudeCanalTroll meinst du das in den Controller zu legen, wo ich will, dass es nicht funktioniert?
BlackDivine
Darf ich Sie fragen, ob Sie diese sehr ähnliche Frage beantworten können? stackoverflow.com/questions/50159847/…
32

Mit Rails 4 haben Sie jetzt die Möglichkeit, skip_before_actionanstelle von zu schreiben skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

oder

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token
jason328
quelle
1
Was ist der Unterschied?
Adam D. Ruppe
Darf ich Sie fragen, ob Sie diese sehr ähnliche Frage beantworten können? stackoverflow.com/questions/50159847/…
John Sam, wenn ich Zeit habe, werde ich versuchen, mich darum zu kümmern.
Jason 328