2015-03-05 7 views
30

Haben statred nur eine neue App in Laravel 5 und ich einige Probleme, die aus dem Kasten heraus Auth mit ...Laravel 5 Auth Beitrag abgeben - TokenMismatchException in VerifyCsrfToken.php Linie 46

Ich erhalte: TokenMismatchException in VerifyCsrfToken.php Zeile 46: beim Einreichen der Login-oder Anmeldeformulare ...

Ich kann auf der Anmeldeseite Formular die Token-Codes, die im versteckten Formularfeld und Sitzung an diesem Punkt sind die gleichen .. .

Als Test habe ich auch versucht, wie einige andere Beiträge vorgeschlagen,auskommentieren// 'App \ Http \ Middleware \ VerifyCsrfToken', in app/Http/kernal.php um zu sehen, was passieren würde. Jedes Mal, wenn ich ein Formular abschicke, bekomme ich eine Nachricht, die besagt, dass ich nach/auth/login oder/auth/register umleiten muss, je nachdem woher ich kam, ohne Erfolg.

Die seltsame Sache war, dass dies funktionierte, als ich das Framework zum ersten Mal installierte. Alles was ich seitdem getan habe, ist ein paar Migrationen durchzuführen und einige meiner Modelle und Controller einzurichten und die Datenbank mit einigen Benutzerdaten zu versehen.

UPDATE:

in diesen Blick weiter in der Funktion tokensMatch() in Zeile 55 von VerifyCsrfToken.php wenn ich:

var_dump($request->session()->token()); 

var_dump($request->input('_token')); 

kann ich sehen, die beiden Token sind unterschiedlich, aber in der Form unter Verwendung von :

var_dump(Session::all()); 

{{{ csrf_token() }}} 

Sie sind gleich. Die Session-Token haben einige geändert, wie, bevor es an der Funktion tokensMatch() in Zeile 55 von VerifyCsrfToken.php

Mein Stack-Trace wird sich wie folgt:

in VerifyCsrfToken.php line 46 
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17 
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61 
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40 
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101 
at Pipeline->then(object(Closure)) in Kernel.php line 111 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84 
at Kernel->handle(object(Request)) in index.php line 53 
+0

Ist dies ein Standardformular Post oder verwenden Sie Ajax? –

+0

Standardformular Post. Einfach das Laravel 5 Auth Setup verwenden. – trenthogan

+0

Erhalten Sie jedes Mal, wenn Sie die Seite aktualisieren, eine neue Datei in 'storage/frameworks/sessions'? – Marwelln

Antwort

0

Ich hatte auch diese sehr gleiche Situation heute, Plötzlich fing meine Anwendung an, mir diese Nachricht zu zeigen ...

Ich habe gerade meinen Server neu gestartet und alles ging wieder normal.

+0

Verdammt reset den Server kein Glück ... – trenthogan

23

ich zum ersten Mal nur um es arbeitet, um die Linie zu entfernen:

von /app/Http/Resquests/Kernel.php

'Illuminate \ Foundation \ Http \ Middleware \ VerifyCsrfToken'. Dies bedeutet jedoch, dass die CSRF token check entfernt wird, was bedeutet, dass Ihre Website nicht vor Cross-Site-Request-Fälschungen geschützt ist.

aktualisiert Nach the documentation, sollten Sie die CSRF-Token zu Ihrem Formular hinzufügen, indem Sie diese Schnipsel zu Ihrem Code hinzufügen:

<input type="hidden" name="_token" value="{{ csrf_token() }}"> 

ich ersten Weg in Backend-Service für die mobilen Einsatz verwendet, aber ich finde ich kann CSRF-Header innerhalb von Anfragen senden.

+3

Aber ist das sicher zu tun? – LoveAndHappiness

+4

Das ist eine wirklich schlechte Idee. – suncoastkid

+1

@LoveAndHappiness das ist wirklich nicht sicher zu tun, und lässt Sie offen für eine Schwachstelle, die häufig ausgenutzt wird: https://en.wikipedia.org/wiki/Cross-site_request_forgery –

0

das Problem gelöst:

Als ich die app.blade csrf-Token geprüft hart es codiert wurde wie <meta content="9DB/rSl5JKAkQenkfGLj4o/x6+1dIDC5m52IWJxjFfo=" name="csrf-token"> danach Entfernen und Hinzufügen von <meta content="authenticity_token" name="csrf-param"> mein Problem behoben.Dies kann helfen, einige one :)

1

Nur Abmelden und Wieder Login das ist der einzige Weg Es ist ein unbekannter Fehler selbst ich es in meiner Form Entsendung bekommen manchmal aber alle Menschen in den Foren alles, was sie sagen, für die Umsetzung aber das löst nicht das Problem nur abmelden und neu einloggen

+0

Das hat für mich funktioniert. Obwohl ich dachte, dass ich bereits ausgeloggt war, habe ich mich abgemeldet (indem ich meine Abmelde-URL besuche) und das Problem wurde gelöst. – mopo922

8

Laut Dokumentation sein kann, warum:

Insert die CSRF-Token in einer Form

<input type="hidden" name="_token" value="{{ csrf_token() }}"> 
0

Das ist, was ich tue, um dieses Problem zu beheben.

Assume that your web server has already write access to session directory, in my case 'app/storage/framework/sessions/'. 

Execute, 

$ rm -f {your_web_app}/storage/framework/sessions/* 

Reload web in your browser and try to login again. 
2

Wenn Sie Blade-Vorlagen verwenden, können Sie in Ihrem Formular setzen verwenden

{{ csrf_field() }} 

statt

<input type="hidden" name="_token" value="{{ csrf_token() }}"> 

Es arbeitete mit mir in Laravel 5.1.

1

Wenn Sie TokenMismatchException in VerifyCsrfToken.php loswerden wollen, lesen Sie in diesem Link für eine einfache Lösung, die durch @Tariq Khan: TokenMismatchException in VerifyCsrfToken.php

+0

Ich verwende tatsächlich die @Luis Morales-Lösung. Von derselben Frage. –

4

Ihre routes.php Datei prüfen. Ich hatte auch diesen Fehler und es stellte sich heraus, dass durch eine leere Zeile an der Spitze verursacht wurde (kurz vor dem Öffnen <?php Tag). So ein dummer Fehler, hoffentlich könnte das jemandem helfen.

+0

ha genau das gleiche Problem ... –

+0

Lol, nach einem halben Tag der Erforschung und Debugging, war eine leere Zeile der Grund für eine solche dumme Fehler. Vielen Dank! – valkirilov

5

Ich hatte das gleiche Problem. Ich löste es durch

'domain' => env('DOMAIN', 'yourdomainnamehere.co.uk'), 

Dann fügen Sie die folgende Zeile die folgende Zeile in config/session.php Wechsel in Sie

DOMAIN=null 
2

.env ich das gleiche Problem hatte, war meine Lösung

<form method="POST" action="path_to_action"> 
    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
    <input type="text" name="some_name"> 
</form> 
+0

Hallo danke Kumpel! Es hat meinen Fehler gelöst. aber ich frage mich nur, sollte ich diese 'an alle meine Eingabeformular für POST? –

0

Es gibt viele Möglichkeiten, die dieses Problem verursachen können. was ich erfahre ist, dass dies ein Problem der falschen Konfiguration der Session.php Konfigurationsdatei sein kann. Haben Sie Ihre Konfigurationsdatei session.php geändert? Mai werden Sie den Wert der Domain von null auf Sie Site-Namen oder irgendetwas anderes in session.php

‚domain‘ => null,

Falsche Konfiguration in dieser Datei dieses Problem kann dazu führen, haben sich geändert.

0

hatte ich das gleiche Problem, laufen php Handwerkers config: Cache

gelöst alles.

Ich hoffe, das jemand

+1

Können Sie Ihre Antwort etwas genauer erklären? – dbmitch

0

Try php Handwerker Route hilft: Liste und überprüfen id Web-Middleware wird wiederholt. Zum Beispiel (Web, Web, andere).

In Laravel 5.3 Web-Middleware standardmäßig aktiviert ist, habe ich hinzugefügt

Route::group(['middleware' => 'web'], function() { ALL MY ROUTE }); 

mit diesem TokenMismatch generiert wurde.

Fix Routen lösen das Problem für mich.

Weitere Informationen Question on Laracast

0

sehen Wenn Sie CSRF in Form verwenden möchten, dann müssen Sie diese Zeile in Ihrer Form hinzufügen

<input type="hidden" name="_token" value="{{ csrf_token() }}"> 

und wenn Sie nicht interessiert sind CSRF zu verwenden, dann müssen Sie um unter Zeile in kernel.php Datei zu kommentieren

//\App\Http\Middleware\VerifyCsrfToken::class, 
0

Vielleicht ist es etwas mit Ihrer App Domain-Einstellungen.

  1. Überprüfen Sie die 'Domain' Einstellung in der config/session.php.
  2. Legen Sie es auf "localhost" oder auf die richtige Domäne fest, die Ihrer App zugeordnet ist.
  3. Speichern Sie die Datei

-Mine aus der env-Datei abgerufen wurde und die App war auf einer anderen Domain.

Ich hoffe, das wird einige Gehirnzellen für jemanden retten.

-1
<script> 
function closedLogo() 
     {  
      $.ajax({ 
        url: '{{route('core.closed-logo')}}', 
        type: 'post', 
        success: function (data) { 
         $('#return').html(data); 
        } 
       }); 
      } 
</script> 
0

Interessanterweise stoße ich in letzter Zeit auf das ähnliche Problem. Ich habe zwei verschiedene Tokens gefunden, die von meiner Laravel 5.1 App generiert wurden. Ich habe das Problem gelöst, indem ich einen neuen Anwendungsschlüssel [php artisan key: generate] generiert habe!

Verwandte Themen