AnDrIYQ
@AnDrIYQ
Начинающий Веб-разработчик

Что значить ошибка TokenMismatchException?

Хотел создать ajax связь на laravel что-то пошло не так, кто шарит в этом хорошо? Спасите! TokenMismatchException

Сама форма
<form method="post" action="" class="my-modal-form">
                  {!! csrf_field() !!}
                    <h1>заказать</h1>
                    <div>
                        <input name="email" required type="email" placeholder="Почта">
                        <input name="name" required type="text" placeholder="Имя">
                        <input name="subm" type="submit" value="Заказать">
                    </div>
                </form>

Тут JQUery код и Ajax
function getMessage(){
           $.ajax({
              type:'POST',
              url:'/buycoffie',
              data:'_token = <?php echo csrf_token() ?>',
              success:function(data){
                 $("input").val(data.msg);
              }
           });
        }

$ ('input[name="subm"]').on('click', function(event) {
  event.preventDefault();
  getMessage()
});

Тут Контроллер единственный. В web.php два роута
namespace App\Http\Controllers;

use App\Navigation;
use App\Frontle;
use App\Description;

use Illuminate\Http\Request;

class IndexController extends Controller
{
    public function run()
    {
      $nav = Navigation::all();
      $fron = Frontle::all();
      $descr = Description::all();

      return view('index', [
          'nav' => $nav,
          'fron' => $fron,
          'descr' => $descr
      ]);
    }

    public function buycoffie()
    {
      if (isset($_POST)) {
        $agv = array('msg' => 'YES!!');

        return response()->json($agv, 200);
      } else {
        return abort(404);
      }
    }
}

web.php

Route::match(['post', 'get'], '/', ['uses' => 'IndexController@run', 'as' => 'home']);
Route::post('/buycoffie','IndexController@buycoffie');
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
glaphire
@glaphire
PHP developer
Это значит, что csrf токен не отсылается, у Вас в ajax он неправильно записан. На stackoverflow и в документации есть примеры, как его правильно отсылать.
UPD. Скорее всего не хватает этого куска:
$(function () {
    $.ajaxSetup({
        headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }
    });
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }

В ajax-запросах для csrf-защиты используются хедеры. Задаётся так, как я написал выше, ну и у тебя должно быть это мета поле объявлено в блоке head, в основном view
<meta name="csrf-token" content="{{ csrf_token() }}">
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы