błąd TokenMismatchException in VerifyCsrfToken.php line 68: laravel

0

Mam taki problem mam formularz dodania nowego produktu do bazy i w momencie kiedy użytkownik jest zalogowany to tylko wtedy ma dodać nowy produkt do bazy, problem zaczyna się wtedy kiedy sesja ciasteczek wygaśnie i wtedy w próbie dodania nowego produktu pojawia się komunika

TokenMismatchException in VerifyCsrfToken.php line 68:

Szukając na zagranicznych forach w instrukcji dodałem coś takie

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

Ale to nie pomogło.

mój kod formularza jest następujący

{{Form::open(array('url' => '/ajax/ajax2', 'files' => true,  'method' => 'post'))}}
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class=row>
<div class=col-xs-2>
</div>
<div class=col-xs-3>
<span class=form>Nazwa produktu</span>
</div>
<div class=col-xs-4>
<input type="text" class="form-control" name="name" value={{Input::old('name')}}>
</div>
</div>

<br>

<div class=row>
<div class=col-xs-2>

</div>
<div class=col-xs-3>
<span class=form>Opis produktu</span>
</div>
<div class=col-xs-4>
<textarea class="form-control" name=description rows=6>
</textarea>
</div>

</div>
<br>
<div class=row>
<div class=col-xs-2>

</div>
<div class=col-xs-3>

<span class=form>Nadrzędna kategoria</span>
</div>
<div class=col-xs-4>

<select id=category name =category class="form-control">
<option value= ></option>
<?php  
$i  =0;
$object_category = new \App\Http\Controllers\funkcje();

$table = $object_category->show_categories();
while ($i < count($table) ) {
  $id2 = $table[$i][0];
  $name = $table[$i][1];
  print "<option value=$id2>$name</option>";
  $i++;
}
?>
</select>
<a href=# id=categor >Kliknij dwa razy</a>
</div>
<div id=invisible></div>
</div>
<br>
<div class=row>
<div class=col-xs-2>
</div>
<div class=col-xs-3>
<span class=form>Podrzędna kategoria</span>
</div>
<div class=col-xs-4>

<select id=category2 name=category2 class="form-control"></select>
</div>



</div>

<br>
<div class=row>
<div class=col-xs-2>
</div>
<div class=col-xs-3>
<span class=form>Cena(jeżeli licytacja to od jakiej ceny)</span>
</div>
<div class=col-xs-4>

<div class="col-xs-4">
<input type="text" class="form-control" name="zl" placeholder=zł>
</div>
<div class="col-xs-4">
<input type="text" class="form-control" name="gr" placeholder=gr>
</div>
</div>





</div>



<br>
<div class=row>
<div class=col-xs-2>
</div>
<div class=col-xs-3>
<span class=form>Data zakończenia licytacji</span>
</div>
<div class=col-xs-4>

<div class="col-xs-4">
<input type="text" class="form-control" name="year" placeholder=rok>
</div>
<div class="col-xs-4">
<input type="text" class="form-control" name="mon" placeholder=miesiąc>
</div>
<div class="col-xs-4">
<input type="text" class="form-control" name="day" placeholder=dzień>
</div>
<div class="col-xs-4">
<input type="text" class="form-control" name="hours" placeholder=godzina>
</div>
</div>





</div>



<br>
<div class=row>
<div class=col-xs-2>
</div>
<div class=col-xs-3>
<span class=form>Ilość</span>
</div>
<div class=col-xs-4>

<div class="col-xs-5">
<input type="text" class="form-control" name="quantity">
</div>
</div>




</div>




<br>
<div class=row>
<div class=col-xs-2>
</div>
<div class=col-xs-3>
<span class=form>Jeżeli licytacja to zaznacz to pole</span>
</div>
<div class=col-xs-4>

<div class="col-xs-5">
<input type=checkbox name=auction>
</div>
</div>




</div>


<br>
<div class=row>
<div class=col-xs-2>
</div>
<div class=col-xs-3>
<span class=form>Wstaw zdjęcie</span>
</div>
<div class=col-xs-4>

<div class="col-xs-5">
{{Form::file('image')}}
</div>
</div>

<br><br>
<div class=row>
<div class=col-xs-10>
<div align=center>
<input type=submit class = "btn btn-primary" value=dodaj>
</div>
</div>
</div>


</form>
<div id="message"></div>
</div>
<?php $messages = $errors->all('<p style="color:red">:message</p>') ?>
<?php foreach ($messages as $msg): ?>
<div align=center><?= $msg ?></div>
<?php endforeach; ?>

Kod kontrollera

    public function ajax2(Request $request) {
    //print "dobrze";
          $permissions = new \App\Http\Controllers\klasa();
          $product = new \App\Http\Controllers\funkcje();
    //$user = new User();
    //print Auth::user()->permissions;

    if (empty(Auth::User()->permissions)) {
      //print "dobrze";
      return Redirect('blad')->with('login_error','Nie masz dostępu do tej części strony');
    }
    else {
    
      $result = $permissions->check_permissions(Auth::user()->permissions,"add_product");
      if ($result == true) {
      
      $file = $request->file('image'); 
      $result2 = $product->check_flap($file);
      if ($product->error == 2) {
      print "dobrzeee";
      return Redirect('add_product')->withErrors($result2)->withInput();
      }
      else return Redirect('add_product_succes');
      
      
      }
      else return Redirect('blad')->with('login_error','Nie masz dostępu do tej części strony');
      
    }

    
     
    
    //print $a;
    /*
     if (Auth::check()) {
    
      //if (Request::ajax()) {
      //return View('/ajax/ajax',['id' => 1]);
      //return View('/ajax/ajax2');
      //}
     }
    */
    
    }

kod pliku web.php

Route::post('/ajax/ajax2','Controller@ajax2');
0

To jest pożądane działanie w momencie gdy sesja wygaśnie. To jest zabezpieczenie na wypadek ataków typu CSRF. Możesz wyłączyć tę funkcję dla danego url w pliku VerifyCsrfToken.php w katalogu app\Http\Middleware.

P.S. Popracuj nad swoim kodem, zarówno HTML jak i PHP. Brak wcięć w kodzie; atrybuty HTML powinny być zawarte w ".
P.S 2. W widokach HTML nie powinieneś używać kodu PHP, tymczasem masz blok kodu PHP, który robi print ...

0

Po co Ci zagraniczne fora kiedy CSRF token jest ładnie opisany w oficjalnej dokumentacji i do tego poparty przykładami?
To samo dotyczy ciasteczek, których zachowanie i czas życia zawsze możesz ustawić w plikach konfiguracyjnych wedle swoich potrzeb.

Do tego używasz Blade, a mieszasz tagi <?php ?> z {{ }}.
Budujesz formy, raz za pomocą Collectiva, raz z palca, a później w pętli w tagach php.
Zaczynasz {{Form::open}} i kończysz </form>.

Nie żebym się czepiał złośliwie, ale myślę, że powinieneś nieco przysiąść w miejscu i przeanalizować swoją aktualna wiedzę bo masz pewne braki, a mimo to ciągle chcesz brnąć do przodu i w końcu zrobi się z tego poważny problem.
To jak z siłownią, fajnie, że masz ambicje i chęć poszerzania swojej wiedzy, ale robienie przysiadów z garbem i kolanami do środka w końcu skończy się poważną kontuzją. Tylko po co skoro mamy ładną dokumentację i wystarzy co nieco przeczytać? :)

0

Budujesz formy, raz za pomocą Collectiva, raz z palca, a później w pętli w tagach php.

Jakie formy ?

0
pol90 napisał(a):

Budujesz formy, raz za pomocą Collectiva, raz z palca, a później w pętli w tagach php.

Jakie formy ?

Chodzi o formularze. Zobacz w dokumentacji jak wygląda tworzenie szablonów Blade, w tym jak wyświetlać pola formularzy. Np. w Blade nie powinieneś używać znaczników <?php.

1 użytkowników online, w tym zalogowanych: 0, gości: 1