2015-06-19 9 views
8

Wenn ich versuche, mich zu zeigen, Token Fehler. Ich habe Token in Sichtform überprüft, es ist richtig und wenn Kommentar \App\Http\Middleware\VerifyCsrfToken::class, in der Kernel.php es mich Login macht, aber nach Redirect zu meinem Dashboard bin ich nicht eingeloggt. Ich benutze MAMP auf Mac.TokenMismatchException in VerifyCsrfToken.php Zeile 53 in Laravel 5.1

Inzwischen verwende ich Sentry Package für die Anmeldung.

/** 
    * post_login 
    */ 
    public function post_login() 
    { 
     try 
     { 
      $rules = [ 
        'customer_code'   => 'required', 
        'password'    => 'required', 
       ] ;      
      $message = [ 
        'customer_code.required'    => 'erorrr1', 
        'password.required'    =>'error2'  
          ];        
      $validator = Validator::make(Input::all(), $rules,$message); 
      if ($validator->fails()) 
      {    
       return Redirect::back()->withErrors($validator)->withInput();   
      } // if ($validator->fails()) 
      else 
      { 
      $authUser = Sentry::authenticateAndRemember(array(
             'customer_code' => Input::get('customer_code'), 
             'password' => Input::get('password')), false); 

          if($authUser) 
          { 
           //$login = Sentry::loginAndRemember($authUser); 
           return Redirect::to('user/panel/'.$authUser->id)->with('comment', 'Welcome'); 
          } 
          else 
          { 
          return Redirect::back()->with('comment', 'Error for login'); 
          } 
      }//validator       
     } 
     catch(\Exception $e) 
     { 
      return Redirect::back()->withInput(Input::except('password','file'))->withErrors(['ERROR!!!!!']); 
     } 
} 
+0

Show wollen Code, den Sie ausgearbeitet haben? Benötigen Sie weitere Informationen? – Bruce

+0

Wie haben Sie das Token generiert? zeige den Code an. – Salar

+0

Stellen Sie sicher, dass Sie in der Ansicht Token auf Ihrem Formular festlegen. in einem versteckten Feld vorzugsweise – Digitlimit

Antwort

5

Edited:

Da Sie Formular-Builder verwenden diese aus dem Formular entfernen. Laravel Formular-Builder fügt automatisch ein verstecktes Token-Feld in das Formular, wenn Sie tun Form::open()

diese Zeile So entfernen:

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

Ich habe dieses Skript bereits benutzt, aber es hat nicht funktioniert. Ich habe Token in meiner Form. –

+0

Nachdem Sie Ihre Frage bearbeitet haben, merke ich, dass Sie Token-Felder hinzufügen. Bitte überprüfen Sie meine bearbeitete Antwort – Digitlimit

0

Sie haben Post nicht Ihren Beispielcode in Ihrer Frage.

daher Ihren Code mit den folgenden Optionen prüfen,

Versuch mit verstecktem Eingabefeld Wert:

{!! Form::open(array('method' => 'GET/POST','url' => 'YOUR_URL',)) !!} 

Dieses Add automatisch wird:

{!! csrf_token() !!} or {{ csrf_token() }} 

Sie auch Formmesser Vorlage verwenden können CSRF-Code in Ihrem HTML-Skript

Eine weitere Sache zu in <head> Abschnitt enthalten ist:

<meta name="csrf-token" content="{{ csrf_token() }}"> 
+0

Ich habe dieses Skript bereits verwendet, hat aber nicht funktioniert. –

+0

Entfernen Sie das versteckte CSRF-Feld, da Sie Form :: open() CSRF automatisch hinzugefügt haben. Sie müssen außerdem den Namen Ihrer Controller-Methode in "postLogin" ändern. –

1

Mit einer Neuinstallation von Laravel 5.1, ohne nur einen Komponisten Update von Version 5.0 auf 5.1 habe ich einige Unterschiede und eine in den Middleware-Ordnern.

EncryptCookies.php sind eine neue Middleware, überprüfen Sie, ob Sie sie haben.

Also ich habe es nicht nochmal getestet, ich übertrage im Moment meine Dateien von meiner Version 5.0 auf eine Neuinstallation von Version 5.1 aber ich bin mir ziemlich sicher, dass EncryptCookies.php die Lösung für dieses Problem sein kann der Stapel des Token-Mismatch-Fehlers.

+0

Wenn jemand will einige Routen aus "authing" auszunehmen dann i Vorschlag/Http/Middleware/VerifyCrsfToken.php App gehen und geschützt $ außer = add [ 'route_1', 'route_1/*', ]; – Memonic

0

Ich hatte dieses Problem auch beim Hochladen einer Datei. Es stellte sich heraus, dass die max_post_size überschritten wurde. In diesem Fall wurden offensichtlich alle POST-Variablen gelöscht und daher wurde kein Token empfangen.

1

Nun ich denke, alle verpassten die CSRF-Token-Erstellung beim Abmelden!

Wie ich das Problem gelöst habe.

Fügen Sie einfach den folgenden Code zur Kopfzeile hinzu.

<meta name="csrf-token" content="{{ csrf_token() }}"> 
<script type=text/javascript> 
    $.ajaxSetup({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      } 
    }); 
</script> 

Und wenn Sie {!!Form::open()!!} verwenden es wird automatisch das Token erstellen.Ansonsten können Sie

<input type="hidden" name="_token" id="_token" value="{!! $csrf_token !!}}" /> 

oder

{!! csrf_field() !!} 

nur unmittelbare Form offen verwenden. Am wichtigsten ist return Redirect::to(''); auf Controller-Funktion oder eine Seite neu zu laden oder Ajax neu zu laden, dass das Token erstellt werden kann!

Like:

public function logout() { 
    Session::flush(); 
    Auth::logout(); 

    return Redirect::to('/'); 
} 

Für sicherzustellen, das Token ordnungsgemäß erstellt oder nicht, "Ansichtsseite Quelle" auf Browser und es wird Shows wie:

<meta name="csrf-token" content="TbgWTQZhTv0J4eFBQNU4rlM3jOlmBeYlTgf0waZB"> 
    <script type=text/javascript> 
    $.ajaxSetup({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      } 
    }); 
    </script> 


<form method="POST" action="/login-process" accept-charset="UTF-8" class="form-inline"><input name="_token" type="hidden" value="TbgWTQZhTv0J4eFBQNU4rlM3jOlmBeYlTgf0waZB"> 

ich denke, es könnte das Problem zu lösen, wie es hat für mich funktioniert!

0

Fügen Sie <?php echo Form::token(); ?> in der Form hinzu.

0

Diese Lösung für mich gearbeitet:

{{ csrf_field() }} überall in Form hinzufügen.

0

Entfernen Sie App \ Http \ Middleware \ VerifyCsrfToken :: Klasse aus $ Middleware in Kernel.php.

+0

Dies sollte ein Kommentar sein –

0

Ich habe den folgenden Code verwendet. Es funktioniert perfekt.

<?php echo csrf_token(); ?> 
0

Ich hatte das gleiche Problem. Ich verwende Laravel 5.1.28, PHP 5.6.13
Nach dem TokenMismatchException in VerifyCsrfToken sieht, suchte ich im Internet nach Antworten, aber kein mein Problem gelöst.

Die Seite hat das Token senden. Die Token-Werte werden auch in der Sitzungsdatei im Verzeichnis storage/framework/sessions angezeigt (ich habe die Verschlüsselung deaktiviert, um sie anzuzeigen).

Erschöpft, ich neu Laravel installieren und einfache Form zum Testen verwenden - es funktionierte ohne Token Mismatch-Fehler.

Ich habe meinen Code Stück für Stück auf das neu installierte Laravel übertragen und schließlich gefunden, dass das Problem von doctrine/dbal verursacht wurde (ich weiß immer noch nicht warum).

Wurde von composer.json entfernt und das Problem verschwand.

"require": { 
    .... 
    "doctrine/dbal": "^2.5" 
    ... 
}, 

Ihr Fall verschieden sein können, aber Sie können, um zu sehen, wenn Sie etwas ändern in composer.json, die verursacht werden können:
Im composer.json wurde Token Konfliktfehler mit der folgenden Zeile gesehen das Problem.

1

Hinzufügen {!! csrf_field() !!} mein Problem gelöst, wie unten gezeigt:

<form action="#" method="post" class="form-horizontal" role="form"> 
{!! csrf_field() !!} 

</form> 

Bei der Verwendung von Laravel Formular Helfern wie unten:

{!! Form::open(array('class' => 'form-horizontal', 'role' => 'form')) !!} 

CSRF-Code automatisch in Ihrem HTML-Skript hinzugefügt.Stellen Sie außerdem sicher, dass der Quellcode im Browser angezeigt wird, um sicher zu gehen, dass ein Feld wie unten tatsächlich hinzugefügt wurde.

<input type="hidden" name="_token" value="dHWBudjTyha9AMr0SuV2ABq5NNK6bTIDZDXRWCBA"> 
0

Ich habe gleiche Problem, während mit diesem Code

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

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

indem es {!! csrf_field() !!} mein Problem lösen

auf L5.1 Ich ändere

0

Es funktioniert bei mir.

<meta name="csrf-token" content="{{ csrf_token() }}" /> 

<script> 
function getMessage(){ 
$.ajax({ 
    headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, 
    type:'POST', 
    url:'/getmsg', 
    // data:'_token = <?php echo csrf_token() ?>', 
    success:function(data){ 
     $("#msg").html(data.msg); 
    } 
}); 
} 
</script> 

{{ Form::button('Replace Message',['onClick'=>'getMessage()']) }} 
Verwandte Themen