2016-06-30 9 views
0

Ich hatte die <%= csrf_meta_tags %> in meinem HEAD-Tag, aber ich erstellte das Formular manuell, so dass die authenticity_token versteckte Feld wurde nicht in meinem Formular eingefügt.Adde Authentizität Token manuell, aber es ist nicht im Backend

So habe ich die authenticity_token manuell:

<input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden"> 

Wenn ich meine Website Standardkontaktformular senden, um die Aktion (Benutzer ist nicht angemeldet), die es behandelt sollte das Token überprüfen und zulassen/die Anforderung verweigern. Aber es ist nicht: Ich verwende jQuery, um das Feld zu leeren und das Formular zu senden, aber kein Fehler oder Ausnahmefehler wird ausgelöst.

Ich habe diese Zeile protect_from_forgery with: :exception in application_controller.rb und setzen Sie das gleiche in die foo_controller.rb, die application_controller erweitert und hat die Aktion, die auf das Kontaktformular reagiert.

Also was fehlt mir? Was muss ich tun, damit dieses Formular im Backend verifiziert wird?

Vielen Dank!

+0

Sie brauchen nicht 'protect_from_forgery mit:: exception' in' foo_controller.rb', solange der Application Controller es hat. Ihr Setup ist in der Regel richtig, aber es ist schwer, mehr zu sagen, ohne Ihr sehendes Formular/Javascript-Code, fügen Sie es bitte hinzu. –

Antwort

0

Wenn das übermittelte Authentifizierungstoken fehlt oder nicht mit dem in der Sitzung übereinstimmt, führt Rails das aus, was protect_from_forgery with: angibt, aber die Anforderungsbehandlung wird nicht beendet. Was passiert, ist, dass die Sitzung zerstört wird, so dass die Anforderung als zu einem nicht eingeloggten Benutzer gehörend behandelt wird.

Hier ist eine ausgezeichnete writeup diskutieren how protect_from_forgery works.

Es ist schwer zu sagen, ohne auf den Code zu schauen, aber ich würde sagen, Ihr Formular-Vorlage-Code nicht entweder den Authentifizierungs-Token-Eingabewert oder es wird veraltet, bevor die Anfrage gestellt wird. Letzteres kann in einer Reihe von Szenarios vorkommen, wie zum Beispiel eine Seite, die aus dem Browser-Cache geladen wird, oder Browser-Registerkarten, die zum Anmelden/Abmelden parallel zu der fraglichen Seite verwendet werden.