2017-04-25 19 views
0

Ich hatte ein Problem mit Laravel 5.4 in POST-Routen.Laravel 5.4 TokenMismatchException (Chrome)

Beim Übermitteln des Formulars wurde der Fehler TokenMismatchException angezeigt.

Ich dachte, es ging um PrefixVariable, also öffnete ich this issue auf Github. Aber nachdem ich zu viel getestet habe und verschiedene Lösungen ausprobiert habe, habe ich herausgefunden, dass das Problem nicht von Prefix verursacht wurde.

Alles in Firefox ist OK, das Hauptproblem tritt in Chrom auf. Die Post-Routen funktionieren nur einmal, nach dem Senden des ersten Formulars, alle folgenden Anforderungen an die gleiche URL-Seite TokenMismatchException Fehler.

Ich habe versucht, folgende:

  • Clearing Chrome Cookies und den Verlauf
  • Lauf php artisan cache:clear Befehl
  • Serve Zum Ändern der Port
  • Prevent Caching in PHP mit Header
  • Prevent Caching in HTML mit Meta Tags

Aber das Problem besteht immer noch.

Was genau stimmt nicht ?! Es wäre zu schätzen, wenn Sie mir helfen.

Login Form:

<form method="post" action="{{route('login')}}"> 
    {!! csrf_field() !!} 
    <div class="row"> 
     <div class="col-xs-12"> 
      <div class="form-group no-margin"> 
       <div class="col-xs-6 col-md-10 col-md-offset-1"> 
        <input name="username" type="text" class="form-control" placeholder="نام کاربری" value="{{old('username')}}"> 
       </div> 
      </div> 
      <div class="form-group no-margin"> 
       <div class="col-xs-6 col-md-10 col-md-offset-1"> 
        <input name="password" type="password" class="form-control" placeholder="کلمه عبور"> 
       </div> 
      </div> 
     </div> 
     <div class="col-xs-12"> 

      <div class="form-group no-margin"> 
       <div class="col-xs-5 col-md-offset-1"> 
        <input name="captcha" type="text" class="form-control" placeholder="کپچا"> 
       </div> 
       <div class="col-xs-5 no-pad-right"> 
        <img src="{{captcha_src('flat')}}" class="img-responsive"> 
       </div> 
      </div> 
     </div> 
     <div class="col-xs-12 text-center"> 
      <div class="form-group"> 
       <button type="submit" class="btn btn-success btn-raised">ورود<div class="ripple-container"></div></button> 
       <button type="reset" class="btn btn-danger btn-raised">انصراف<div class="ripple-container"></div></button> 
      </div> 
     </div> 
    </div> 
</form> 

web.php

Route::group(['prefix' => config('system.ADMIN_PATH'), 'namespace' => 'Panel'], function(){ 
    Route::get('/', function(){return redirect()->route('login');}); 
    Route::get('/auth', '[email protected]')->name('login'); 
    Route::post('/auth', '[email protected]')->name('check'); 
}); 

AuthController.php:

namespace App\Http\Controllers\Panel; 

use Illuminate\Http\Request; 
use Illuminate\Routing\Controller; 

class AuthController extends Controller 
{ 
    public function Login(Request $request) 
    { 
     header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
     header("Cache-Control: post-check=0, pre-check=0", false); 
     header("Pragma: no-cache"); 

     return view('admin.login'); 
    } 

    public function Auth(Request $request) 
    { 
     header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
     header("Cache-Control: post-check=0, pre-check=0", false); 
     header("Pragma: no-cache"); 
     dump($request->all()); 
     echo "Received"; 
    } 
} 
+0

Was ist der Zweck dieser Header? –

+0

@TobyMellor Nur verhindern, zwischenspeichern. Es gibt keinen Unterschied in der Ausgabe ohne Header. –

Antwort

0

Ich habe herausgefunden, was die Lösung ist!

Ich habe versucht, die Cookies aus dem Verlauf in den Einstellungen zuvor zu löschen. Ich löschte XSRF-TOKEN Cookie von Inspect Element > Application Tab > Storage (Left side) > Cookies > localhost:port und danach war alles in Ordnung.

0

Sagen Sie mir eine Sache haben Sie mit Layout-Datei überprüft unter Code als Standard Laravel app.blade.php zum Zeitpunkt der Installation zur Verfügung gestellt hat.

<!-- CSRF Token --> 
<meta name="csrf-token" content="{{ csrf_token() }}"> 


<script> 
    window.Laravel = {!! json_encode([ 
     'csrfToken' => csrf_token(), 
    ]) !!}; 
</script> 
+0

Ich arbeite nicht mit Ajax. Es ist nur eine einfache Formularvorlage. Ich denke, das Problem hängt mit den Chrome-Einstellungen zusammen, da die Codes in Firefox gut funktionieren. –

0

Dies ist kein Problem mit Laravel, es ist mit Chrom.

weil Chrom nicht Cookie speichern (reference) für localhost so Laravel kippt Session-ID speichern, deshalb nicht Sitzung erstellt laden kann. so ist es regenerierend.

Zum Testen dieser Angelegenheit können Sie alle Storage Sessions löschen und Ihre Seite neu laden.Wenn im Sitzungsspeicherordner zwei Sitzungsdateien erstellt werden, ist dies die Lösung für Sie.

soloution:

Verwendung 127.0.0.1 ip statt localhost.

das hat für mich gearbeitet. Probier es aus.!

Verwandte Themen