it-swarm.com.de

TokenMismatchException in VerifyCsrfToken.php Zeile 53 in Laravel 5.1

Wenn ich versuche, mich anzumelden, zeige mir einen Token-Fehler. Ich habe das Token im View-Formular geprüft und es ist richtig, und wenn der Kommentar \App\Http\Middleware\VerifyCsrfToken::class, Im Kernel.php mich anmeldet, muss ich mich anmelden, aber nach Umleitung zu meinem Dashboard bin ich nicht angemeldet.

<div>
    <h1>Login</h1>
    <div>
        {!! Form::open(['url'=>'user/login','class' => '']) !!}
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        <ul>
          <li><label>Customer Code</label>{!!Form::Text('customer_code',Input::old('customer_code'),['class'=>''])!!}</li>
          <li><label>Password</label>{!!Form::Password('password','',['class'=>''])!!}</li>
          <li>{!! Form::submit('Submit',array('class' => 'btn')) !!}</li>
        </ul> 
        {!!Form::close()!!}
    </div>
    <div><a href="{!!URL::to('user/forget_password')!!}">Forget Password</a></div>
</div>

Inzwischen benutze ich Sentry Package für den Login.

    /**
     * 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!!!!!']);
         }
}
9
reza_khalafi

Bearbeitet:

Da Sie den Form Builder verwenden, entfernen Sie diesen aus Ihrem Formular. Laravel Form Builder fügt Ihrem Formular automatisch ein ausgeblendetes Tokenfeld hinzu, wenn Sie Form::open() ausführen.

Also entferne diese Zeile:

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

Ich glaube, alle haben die CSRF-Token-Erstellung beim Abmelden verpasst!

Da habe ich das Problem gelöst.

Fügen Sie einfach untenstehenden Code in die Kopfzeile ein.

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

Wenn Sie {!!Form::open()!!} verwenden, wird das Token automatisch erstellt. Ansonsten können Sie verwenden 

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

oder

{!! csrf_field() !!}

nur sofortige Form offen. Am wichtigsten ist return Redirect::to(''); für die Controller-Funktion oder ein Seiten-Reload oder Ajax-Reload, damit das Token erstellt werden kann!

Mögen:

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

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

Um sicherzustellen, dass das Token ordnungsgemäß erstellt wurde oder nicht, überprüfen Sie "Seitenquell anzeigen" im Browser und es wird Folgendes angezeigt:

<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 lösen, da es für mich funktioniert hat!

2
Honest Knight

Bei einer Neuinstallation von Laravel 5.1, ohne ein Composer-Update von Version 5.0 auf 5.1, sehe ich einige Unterschiede und einen im Middleware-Ordner. 

EncryptCookies.php ist eine neue Middleware. Überprüfen Sie, ob Sie diese haben. 

Also, ich habe es nicht noch einmal getestet, ich übertrage im Moment meine Dateien von meiner Version 5.0 auf eine neue Installation von Version 5.1, aber ich bin mir ziemlich sicher, dass dies die Lösung für dieses Problem sein kann Token-Nichtübereinstimmungsfehler. 

1
Gabriel Sigouin

Durch das Hinzufügen von {!! csrf_field() !!} wurde mein Problem wie folgt gelöst:

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

</form>

Bei Verwendung von Laravel Formularhelfer wie folgt:

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

Der CSRF-Code wird automatisch in Ihr HTML-Skript eingefügt. Stellen Sie außerdem sicher, dass Sie den Quellcode im Browser anzeigen, um sicherzustellen, dass ein Feld wie das folgende hinzugefügt wird.

<input type="hidden" name="_token" value="dHWBudjTyha9AMr0SuV2ABq5NNK6bTIDZDXRWCBA">
1
Fokwa Best

Fügen Sie <?php echo Form::token(); ?> in das Formular ein.

0
IshaS

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

0
Dennis Koster

Ich hatte das gleiche Problem. Ich verwende Laravel 5.1.28, php 5.6.13
Nachdem ich die TokenMismatchException in VerifyCsrfToken gesehen hatte, durchsuchte ich das Web nach Antworten, aber mein Problem wurde nicht gelöst.

Die Seite hat das Token gesendet. Die Tokenwerte werden auch in der Sitzungsdatei im Verzeichnis storage/framework/sessions angezeigt (ich habe die Verschlüsselung deaktiviert, um sie zu sehen).

Erschöpft installiere ich Laravel erneut und verwende ein einfaches Formular zum Testen - es funktionierte ohne Fehler bei den Token-Fehlern.

Nachdem ich meinen Code Stück für Stück auf die neu installierte Laravel verschoben hatte, stellte ich schließlich fest, dass das Problem durch Doktrin/dbal verursacht wurde (ich weiß immer noch nicht, warum).

Wenn es aus composer.json entfernt wurde, ist das Problem verschwunden.
In der composer.json wurde ein Token-Nichtübereinstimmungsfehler in der folgenden Zeile angezeigt:

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

Ihr Fall unterscheidet sich möglicherweise, aber Sie möchten vielleicht sehen, ob Sie etwas in Composer.json ändern, das das Problem verursacht.

0
Brian Ye

Ich habe das gleiche Problem bei der Verwendung dieses Codes 

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

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

indem Sie es in {!! csrf_field() !!} ändern, lösen Sie mein Problem 

ich bin auf L5.1

0
majid

Diese Lösung hat für mich funktioniert:

Fügen Sie {{ csrf_field() }} an einer beliebigen Stelle im Formular hinzu.

0
Mario Ene

Entfernen Sie die App\Http\Middleware\VerifyCsrfToken :: -Klasse aus der $ middleware in Kernel.php.

0
user1236395

Sie haben Ihren Beispielcode nicht in Ihre Frage eingestellt.

Überprüfen Sie deshalb Ihren Code mit den folgenden Optionen:

versuchen Sie es mit einem ausgeblendeten Eingabefeldwert:

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

Sie können auch eine Formularblattvorlage verwenden:

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

Dadurch wird automatisch CSRF-Code in Ihrem HTML-Skript hinzugefügt

Eine weitere Sache, die im Abschnitt <head> enthalten ist, ist:

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

Für mich geht das. 

<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()']) }}
0
Mamun Rasid

Ich habe den folgenden Code verwendet. Es funktioniert perfekt.

<?php echo csrf_token(); ?>
0
user3378755