Hello,

Donc voila je suis la formation Laravel de Grafikart, mais une fois arriver au session et l'auth, j'ai cette erreur:

TokenMismatchException in VerifyCsrfToken.php line 46:

Que ce soit pour l'authentification ou meme pour le session::flash() pour l'edition de posts..

J'ai cherché un peu sur google il conseil d'installer "homestead" mais j'ai un peu peur d'installer quoi que ce soit alors que je n'ai meme pas encore fini la formation :/
Quelqu'un sait comment fixer cette erreur ?

Je suis sous windows, j'utilise Xampp

3 réponses


L'erreur parle d'elle même cher ami !

Tu as un système de vérification au niveau des formulaires. C'est à dire qu'il faut un champ _token caché, généré par Laravel qui lui permet de checké la validité de la requete.
Comment construis-tu ton formulaire ?

Utilise tu FormBuilder d'Illuminate ? Ou tu es à la mano pour le moment (HTML simple ?).

newQuery
Auteur
<?php 
if($post->id)
{
    $options = ['method' => 'put', 'url' => action('PostsController@update', $post)];
}
else 
{
    $options = ['method' => 'posts', 'url' => action('PostsController@store')];
}

?>

@include('errors')
@include('flash')

{!! Form::model($post, $options) !!}

<!--  Input Titre --> 
<div class="form-group">

{!! Form::label('title', 'Titre') !!}
{!! Form::text('title', null, ['class' => 'form-control']) !!}

</div>

<!--  INPUT Slug --> 
<div class="form-group">

{!! Form::label('slug', 'Url') !!}
{!! Form::text('slug', null, ['class' => 'form-control']) !!}

</div>

<!--  Select Categorie --> 
<div class="form-group">

{!! Form::label('category_id', 'Catégorie') !!}
{!! Form::select('category_id', $categories, null, ['class' => 'form-control']) !!}

</div>

<!--  Select Multiple pour les TAGS --> 
<div class="form-group">

{!! Form::label('tags_list[]', 'Tags') !!}
{!! Form::select('tags_list[]', App\Tag::lists('name', 'id'), null, ['class' => 'form-control', 'multiple' => true]) !!}

</div>

<!--  Textarea Contenu --> 
<div class="form-group">

{!! Form::label('content', 'Contenu') !!}
{!! Form::textarea('content', null, ['class' => 'form-control']) !!}

</div>

<!--  Checkbox Online --> 
<div class="form-group">

<label>
    {!! Form::checkbox('online', 1) !!}
    En ligne ?
</label>

</div>
<!--  SEND --> 
<button class="btn btn-primary">Envoyer</button>
{!! Form::close() !!}

Salut,

Evite de poster ton code en brut comme ça on a l'impression que tu t'en fou ^^

Sinon si tu inspecte l'élement (ton formulaire), as tu un input hidden _token ?

Seconde chose, je vois que tu fait un test au début de ton fichier afin de déterminer si il y a un id ou pas pour upate ou non.

Tu peux aussi (je trouve ça plus propre) :

  • Créer une vue partials/form.blade.php
  • Créer deux vue :
    • Une create.blade.php
    • Une edit.blade.php

Dans create.blade.php :

@include('errors')
@include('flash')

{!! Form::create(['method' => 'posts', 'url' => action('PostsController@store')]) !!}
    @include('supertruc.partials.form')
{!! Form::close() !!}

Dans edit.blade.php

@include('errors')
@include('flash')

{!! Form::model($post, ['method' => 'posts', 'url' => action('PostsController@store')]) !!}
    @include('supertruc.partials.form')
{!! Form::close() !!}

Et bien evidemment, dans partials/form.blade.php :

<!--  Input Titre --> 
<div class="form-group">
    {!! Form::label('title', 'Titre') !!}
    {!! Form::text('title', null, ['class' => 'form-control']) !!}
</div>

<!--  INPUT Slug --> 
<div class="form-group">
    {!! Form::label('slug', 'Url') !!}
    {!! Form::text('slug', null, ['class' => 'form-control']) !!}
</div>

<!--  Select Categorie --> 
<div class="form-group">
    {!! Form::label('category_id', 'Catégorie') !!}
    {!! Form::select('category_id', $categories, null, ['class' => 'form-control']) !!}
</div>

<!--  Select Multiple pour les TAGS --> 
<div class="form-group">
    {!! Form::label('tags_list[]', 'Tags') !!}
    {!! Form::select('tags_list[]', App\Tag::lists('name', 'id'), null, ['class' => 'form-control', 'multiple' => true]) !!}
</div>

<!--  Textarea Contenu --> 
<div class="form-group">
    {!! Form::label('content', 'Contenu') !!}
    {!! Form::textarea('content', null, ['class' => 'form-control']) !!}
</div>

<!--  Checkbox Online --> 
<div class="form-group">
    <label>
            {!! Form::checkbox('online', 1) !!}
            En ligne ?
    </label>
</div>

<!--  SEND --> 
{!! Form::button('Envoyer', ['class' => 'btn btn-primary', 'type' => 'submit']) !!}

Attention à éviter au maximum les requetes dans les vues, c'est pas le meilleur endroit pour les faires. Préfère prendre 2 minutes et récupérer tes données depuis le controller et de l'envoyer à ta vue.

Sinon pour ta remarque concernant Homestead, elle est un poil justifié.
Cependant, si l'on regarde la documentation Laravel, il propose d'installer Homestead dès le début de la formation. (Lien). C'est une "sécurité" de l’utiliser, sachant que la configuration que la machine virtuelle correspond parfaitement au besoin de Laravel. (Version de PHP, utilisation des Ngnix (non obligatoire) ....).
Personnellement je trouve ça intéressant de l'installer, malgré le fait que ce soit en aucun cas obligatoire. Un bon vieux Wamp/Mamp fonctionne aussi très bien.

Tu dit que l'erreur se trouve aussi sur le formulaire de connexion, pourrait tu nous le montrer ?

PS : Je viens de voir que Laravel vient de sortir sa version 5.1, voici l'URL de la doc sur la vérification des tokens, ça pourrait t'aider : http://laravel.com/docs/5.1/routing#csrf-protection