laravel 4: warum ist die Anfrage::header () - nicht immer die angegebene header?
Ich versuche, einen header-Wert mit:
Request::header('csrf_token')
obwohl, mein firebug sagt, dass in den Kopf, dass ich die csrf_token eingestellt baMDpF0yrfRerkdihFack1Sa9cchUk8qBzm0hK0C
. In der Tat, das kann ich csrf_token
statt, die mit einem nativen php-code:
getallheaders()['csrf_token']
Nun ist die Frage, mache ich meine XSRF-Schutz rechts? oder vielleicht gibt es einen Fehler in php code, den ich wusste, dass ich wirklich buggy laravel 4 Funktion
Request::header('csrf_token')
gibt nichts, aber leer. Und ich einfach nur etwas verpasst. vielleicht in meinem Laravel 4 Konfigurationen, etc?
P. S: ich bin mit AngularJS, aber vielleicht ist es egal, was clientseitiger ich verwenden. Ich habe diesen link als mein Führer: So senden Sie csrf_token() in AngularJS Formular mit Laravel-API?
- Erlauben Sie mir eine kleine Frage zurück: Warum erwarten Sie, dass
Request::header('csrf_token')
gibt, die header-Wert in den ersten Platz? Nur weil der name der class-Methode? Haben Sie sah in die Quelle, die Methode, was Sie eigentlich tut? - vielen Dank für den Kommentar und die Idee. Source-code, den Sie sagen? hmm, ich dont finden es einfach und intuitiv zu Folgen. Also, was muss die entsprechende Funktion zu verwenden? wenn nicht, Anfrage::header(); wie Content-type abrufen in laravel vier-Dokumentation; Request::header('Content-Type');
- Ich wollte nur herausfinden, warum Sie gewählt haben, dass code. Wie Ihr Kommentar zeigt, ist eine Art der minimalen Verständnis scheint fehlt, ist ein off-topic-Kriterien für dieses Q&Eine website, wie Sie nicht sogar erwarten, dass Sie den code in Frage zu arbeiten und das Problem zu reproduzieren. Ich schlage vor, Sie Fragen, um in die Laravel 4 Foren statt.
- Fragen in Bezug auf Probleme mit dem code, den Sie geschrieben haben muss beschreiben Sie das problem und sind Sie gültigen code, um es zu reproduzieren — in der Frage selbst. Siehe SSCCE.org für die Führung.
- okay, schlecht zu sehen, es dann. Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich löste das problem durch das entfernen der Unterstriche '_' in csrf_token so wäre es crsftoken statt.
Ich denke, das problem dort ist, dass in der folgenden Antwort an So senden Sie csrf_token() in AngularJS Formular mit Laravel, die Sie verwendet, die csrf_token ist nicht geschickt in der Kopfzeile Ihres XMLHttpRequest-aber in der form selbst.
Müssen Sie dann zu filtern, es in Ihrem laravel backend als regelmäßigen Input-Feld. Siehe unten für ein Beispiel :
UPDATE
Wenn Sie möchten, verwenden Sie überschriften in Eckigen, Sie würde eher etwas schreiben wie :
Damit meldest einen neuen header zu Ihrem XMLHttpRequests. Dann ist es leicht abfangbar auch mit raw-php wie :
Problem
Laravel ist das entfernen der Header mit einem Unterstrich im Namen abrufen, wenn Sie mit der
Request::header()
Methode. Außerdem werden alle header-Namen werden in Kleinbuchstaben konvertiert in dieRequest::header()
Methode.Kurze Lösung
Auf dem frontend, ersetzt alle Unterstriche in den header-Namen mit Bindestrichen.
csrf_token
wirdcsrf-token
Lange Lösung
Fügen Sie die Laravel CSRF-token als Winkel konstant auf Ihrer Hauptseite /layout.
Fügen das token als ein Standard-header für alle Ihre Anfragen in Eckig.
Haben Ihre
csrf
filter in Laravel check für ein Spiel in der Header eher als ein Eingang.Request::header()
ist in der Tat für die Abruf der Kopfzeilen, aber überprüfen Sie, wo sich der token ist gesetzt.. das CSRF-token werden sollte in der Sitzung von Laravel, und dann ist es zugegriffen werden kann durch dieSession::token()
Methode.Wenn Sie einen Blick auf das generierte HTML-Code durch Aufrufe an die
Form::
Klasse, werden Sie sehen, eine verborgene element namens_token
sollte dann verglichen werden, um das token in der session. Sie können den Zugriff, die VerwendungInput::get('_token')
wie jede andere eingehende GET-oder POST-Variablen....Aber all dies sollte nicht wirklich notwendig sein, wie es verwaltet werden kann und einfach durch die vorgegebenen
CSRF
filter infilters.php
nur fügen Sie den filter, um die gewünschte route oder route-Gruppe und Sie werden geschützt werden, ohne sich in den details.<?php echo csrf_token() ?>
so habe ich diesen Wert in meinem frontend ein header machen csrf_token, die dann gelesen werden und abgestimmt werden, um Session::token() (das feine) von laravel4, obwohl ich das von getallheaders()['csrf_token']; ich habe mich nur gefragt, warum Anfrage::header('csrf_token') liefert leerenist das problem mit dem Symfony-Request-Objekt, das erweitert in der Laravel-framework. Siehe das github-thread
https://github.com/laravel/framework/issues/1655#issuecomment-20595277
Die Lösung in deinem Fall wäre, um die header-Namen zu HTTP_CSRF_TOKEN oder HTTP_X_CSRF_TOKEN, wenn Sie mögen, indem Sie X, um Ihre benutzerdefinierten http-Header.