TokenMismatchException in VerifyCsrfToken.php ligne 53 dans Laravel 5.1

quand j'essaie de me connecter, montrez-moi l'erreur du token. J'ai vérifié jeton en vue de sa forme, il est droit et quand le commentaire AppHttpMiddlewareVerifyCsrfToken::class, dans le Kernel.php il me fait me connecter mais après avoir redirigé vers mon tableau de bord, Je ne suis pas connecté. J'utilise MAMP sur mac.

<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>

en Attendant, j'utilise Sentry Package pour la connexion.

    /**
     * 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!!!!!']);
         }
}
8
demandé sur YoungHobbit 2015-06-19 12:42:41

13 réponses

Édition:

puisque vous utilisez form builder, retirez ceci de votre formulaire. Laravel form builder ajoute automatiquement un champ token caché à votre formulaire lorsque vous faites Form::open()

donc, supprimez cette ligne:

 <input type="hidden" name="_token" value="{{ csrf_token() }}">
5
répondu Digitlimit 2016-03-18 13:37:54

Eh bien je pense que tout le monde a manqué la création de jeton CSRF pendant la déconnexion!

Comme je l'ai résolu le problème.

Juste ajouter le code ci-dessous à l'en-tête.

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

Et si vous utilisez {!!Form::open()!!} il créera automatiquement le token. Sinon, vous pouvez utiliser

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

ou

{!! csrf_field() !!}

juste le formulaire immédiatement ouvert. Plus important encore utiliser return Redirect::to(''); fonction on controller ou recharge de page ou Recharge ajax que le token peut être créé!

Comme:

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

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

pour s'assurer que le token correctement créé ou ne pas cocher "view page source" sur le navigateur et il affichera comme:

<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">   

je pense qu'il pourrait résoudre le problème comme il a fonctionné pour moi!

2
répondu Honest Knight 2015-10-05 06:08:11

avec une nouvelle installation de Laravel 5.1, sans juste une mise à jour de composer de la version 5.0 à 5.1 je vois quelques différences et une dans le dossier Middleware.

EncryptCookies.php est un nouveau Middleware, vérifier si vous l'avez.

donc, je ne l'ai pas testé à nouveau, je tranfert en ce moment mes fichiers de ma version 5.0 à une nouvelle installation de la version 5.1 mais je suis assez sûr que cela peut être la solution pour ce problème, EncryptCookies.php était dans la pile de l'inadéquation des tokens erreur.

1
répondu Gabriel Sigouin 2015-07-28 01:17:43

ajouter {!! csrf_field() !!} résolu mon problème comme indiqué ci-dessous:

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

</form>

Si vous utilisez Laravel helper Form comme ci-dessous:

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

le Code CSRF sera ajouté automatiquement dans votre script html. Assurez-vous également de voir le code source dans le navigateur pour être certain qu'un champ tel que ci-dessous a bien été ajouté.

<input type="hidden" name="_token" value="dHWBudjTyha9AMr0SuV2ABq5NNK6bTIDZDXRWCBA">
1
répondu Fokwa Best 2016-04-24 15:52:32

vous n'avez pas affiché votre code d'échantillon dans votre question.

par conséquent, vérifiez votre code avec les options suivantes,

essayez avec champ caché valeur:

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

vous pouvez également utiliser le modèle de lame de formulaire:

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

ceci ajoutera automatiquement du Code CSRF dans votre script html

encore une chose à inclure dans <head> est:

<meta name="csrf-token" content="{{ csrf_token() }}">
0
répondu Siddharth Jogia 2015-06-19 11:41:26

j'avais aussi ce problème en essayant de télécharger un fichier. Il s'est avéré que la taille max_post_size était dépassée, auquel cas apparemment toutes les variables POST sont effacées et donc aucun jeton n'est reçu.

0
répondu Dennis Koster 2015-09-08 08:43:54

Ajouter <?php echo Form::token(); ?> dans le formulaire.

0
répondu IshaS 2015-10-21 09:56:49

Cette solution a fonctionné pour moi:

Ajouter {{ csrf_field() }} n'importe où dans le formulaire.

0
répondu Mario Ene 2015-11-13 07:28:58

Supprimer les App\Http\Middleware\VerifyCsrfToken::classe à partir de $middleware dans le Noyau.php.

0
répondu user1236395 2015-12-09 02:59:52

j'ai utilisé le code suivant. Il fonctionne à la perfection.

<?php echo csrf_token(); ?>
0
répondu user3378755 2015-12-15 12:59:43

j'ai eu le même problème. J'utilise Laravel 5.1.28, php 5.6.13

Après avoir vu le TokenMismatchException dans VerifyCsrfToken, j'ai cherché des réponses sur le web mais aucune n'a résolu mon problème.

la page a envoyé le token. Les valeurs de token sont également vues dans le fichier de session dans le répertoire de stockage/framework/sessions (j'ai désactivé le cryptage pour le voir).

épuisé, je ré-installe laravel et utilise une forme simple pour les tests - il a fonctionné sans jeton inadéquation erreur.

déplacement de mon code vers le laravel nouvellement installé pièce par pièce, j'ai enfin trouvé que le problème a été causé par la doctrine/dbal (je ne sais toujours pas pourquoi).

Supprimé de compositeur.json et le problème ont disparu.

Dans le compositeur.json, jeton d'erreur d'incompatibilité a été vu avec la ligne suivante:

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

votre cas peut être différent, mais vous pouvez vouloir voir si vous changez quoi que ce soit dans compositeur.json qui peut être à l'origine de la problème.

0
répondu Brian Ye 2016-01-28 19:12:58

j'ai le même problème en utilisant ce code

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

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

par {!! csrf_field() !!} résoudre mon problème

je suis sur L5.1

0
répondu majid 2016-07-05 06:59:37

ça marche pour moi.

<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
répondu Mamun Rasid 2016-07-28 12:11:40