Meine Registrierungsseite zeigt das Formular korrekt mit CsrfToken an ({{ csrf_field() }}
) im Formular vorhanden ist.
Form HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
Ich verwende die integrierte Authentifizierung für die Benutzer. Haben nichts außer den Routen und Weiterleitungen geändert.
Wenn ich das Formular abschicke (auch kurz nach dem erneuten Laden), wird angezeigt, dass die Seite aufgrund von Inaktivität abgelaufen ist. Bitte aktualisieren und erneut versuchen. Error.
Ich vermisse eine sehr kleine Sache. Aber nicht sicher, was es ist. Irgendeine Hilfe?
Aktualisieren
Fand das Problem. Der Sitzungstreiber wurde auf Array gesetzt. Es wurde in eine Datei geändert und der Fehler ist jetzt behoben. Aber was ist falsch, wenn ich Array verwende?
php
laravel
csrf
laravel-5.5
Sougata Bose
quelle
quelle
array
. Es wurde in eine Datei geändert und der Fehler ist jetzt behoben. Aber was ist falsch, wenn ich Array verwende?Antworten:
Wenn Sie direkt von einer Suche zu dieser Antwort kommen , stellen Sie sicher, dass Sie das csrf-Token bereits
{{ csrf_field() }}
wie das OP zu Ihrem Formular hinzugefügt haben .Wenn Sie Ihren Sitzungstreiber auf Datei eingestellt haben:
Kann etwas damit zu tun haben, dass der Speicherpfad nicht beschreibbar ist. Hier werden Sitzungsdaten zu Token gespeichert, wenn Sie dateibasierte Sitzungen verwenden. Das kann mit überprüft werden
is_writable(config('session.files'))
Für das OP wurde der Sitzungstreiber auf Array gesetzt. Das Array dient nur zum Testen. Da die Daten nicht beibehalten werden, kann das Token bei der nächsten Anforderung nicht verglichen werden.
https://laravel.com/docs/5.5/session#configuration
Überprüfen Sie config / session.php
Als letztes Problem hatten wir ein Projekt mit der Sitzungsdomäne und den sicheren Einstellungen in config / session.php, aber die Entwicklungssite verwendete kein HTTPS (SSL / TLS). Dies verursachte diesen generischen Fehler, da session.secure standardmäßig auf true gesetzt war.
quelle
Carbon::setTestNow($time);
in den Tests nicht durch anschließende VerwendungCarbon::setTestNow();
gelöscht habe.Ich bin in Laravel 5.5 auf dasselbe Problem gestoßen. In meinem Fall geschah dies nach dem Ändern einer Route von GET zu POST. Das Problem war, dass ich vergessen habe, ein CSRF-Token zu übergeben, als ich zu POST gewechselt bin.
Sie können entweder ein CSRF-Token in Ihrem Formular veröffentlichen, indem Sie Folgendes aufrufen:
Oder schließen Sie Ihre Route in app / Http / Middleware / VerifyCsrfToken.php aus
quelle
csrf_field()
in der Form vorhanden. Die akzeptierte Antwort beschreibt das Problem. Vielen Dank.Probieren Sie alle aus.
quelle
Dies ist darauf zurückzuführen, dass Sie
Illuminate\Session\TokenMismatchException
sich dieses Codebeispiel ansehen, wie Sie richtig damit umgehen:quelle
Mein Fall wurde gelöst mit
SESSION_DOMAIN
, in meinem lokalen Computer musste eingestellt werdenxxx.localhost
. Es verursachte Konflikte mit der ProduktionSESSION_DOMAIN
,xxx.com
die direkt in der Konfigurationsdatei session.php festgelegt wurde.quelle
file
odercookie
?Einige Informationen werden im Cookie gespeichert, das sich auf frühere Versionen von Laravel in der Entwicklung bezieht. Es widerspricht also den von csrf generierten Token, die von den Versionen eines anderen generiert werden. Löschen Sie einfach den Cookie und probieren Sie es aus.
quelle
<input type="hidden" name="_token" value="Umr1AlG3sScdUWGtMoHcQPPKASsR7qsd5ZE1H3Xv">
Art Code in generiertem HTML sehen?Für diejenigen, die noch Probleme haben und nichts geholfen hat. Achten Sie auf den Parameter php.ini mbstring.func_overload. Es muss auf 0 gesetzt werden. Und mbstring.internal_encoding muss auf UTF-8 gesetzt sein. In meinem Fall war das ein Problem.
quelle
Ich ändere die Berechtigung zum Speichern und Fehler war weg. Es schien, dass mangelnde Erlaubnis das Problem war.
quelle
hinzufügen
@csrf
Sie das Formular aus und gehen auch auf VerifyCsrfToken.phpapp-> Http-> Middleware-> VerifyCsrfToken.php
quelle
In meinem Fall war die Site auf dem Server in Ordnung, aber nicht auf dem lokalen. Dann erinnere ich mich, dass ich an einer sicheren Website gearbeitet habe.
Setzen Sie also in der Datei config.session.php die Variable Secure auf false
quelle
Ich hatte die App mit mehreren Subdomains und Session Cookie war das Problem zwischen diesen. Das Löschen der Cookies hat mein Problem behoben.
Versuchen Sie auch, die
SESSION_DOMAIN
in .env- Datei festzulegen . Verwenden Sie die genaue Subdomain, die Sie durchsuchen.quelle
Stellen Sie sicher, dass auf Ihrem Webserver die richtige Systemzeit vorhanden ist. In meinem Fall war die Vagabundmaschine in der Zukunft (26. Januar, 14:08:26 UTC 2226), daher war die Zeit im Sitzungscookie meines Browsers natürlich vor mehr als 200 Jahren abgelaufen.
quelle
einstellen mbstring.func_overload = 2
Es hat mir geholfen
quelle
Ich habe zwei Lösungen gefunden, um diesen Fehler zu vermeiden. 2) Kommentieren Sie einfach \ App \ Http \ Middleware \ VerifyCsrfToken :: class in der geschützten Middleware-Gruppe im Kernel
quelle
Ich hatte das gleiche Problem, aber das Problem liegt nicht im Framework, sondern im Browser. Ich weiß nicht warum, aber Google Chrome blockiert Cookies in meinem Fall automatisch. Nach erlaubten Cookies wurde das Problem behoben.
quelle
Kurze Antwort
Fügen Sie den Routeneintrag für
register
in hinzuapp/Http/Middleware/VerifyCsrfToken.php
und löschen Sie den Cache und die Cache-Route mit den Befehlen:
Einzelheiten
Jedes Mal, wenn Sie auf eine Laravel-Site zugreifen, wird ein Token generiert, auch wenn die Sitzung nicht gestartet wurde. Bei jeder Anforderung wird dieses Token (das in den Cookies gespeichert ist) anhand seiner Ablaufzeit überprüft, die im
SESSION_LIFETIME
Feld in derconfig/session.php
Datei festgelegt ist.Wenn Sie die Site länger als die Ablaufzeit geöffnet halten und versuchen, eine Anforderung zu stellen, wird dieses Token ausgewertet und der Ablauffehler wird zurückgegeben. Um diese Überprüfung für Formulare zu überspringen, die außerhalb der Funktionen authentifizierter Benutzer liegen (z. B. Registrieren oder Anmelden), können Sie die Ausnahme-Route hinzufügen
app/Http/Middleware/VerifyCsrfToken.php
.quelle
Oft passiert es, weil Sie das Projekt in einem früheren Datum testen
quelle
Lösung:
Verwenden Sie den neuen Inkognito-Tab und testen Sie ihn erneut.
Grund:
In meinem Fall hat sich ein anderer Benutzer mit meinem Admin-Panel angemeldet
quelle