Как исправить ошибку неаутентифицированного токена в Ajax submit с помощью нескольких кнопок laravel - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь добавить новые элементы в таблицу пожеланий пользователя, когда нажимаю кнопку с ajax. но я получаю сообщение об ошибке {"message": "Unauthenticated."} как это исправить, я использую токен csrf в head meta, но он не работает

скрипт JS

function newItem() {
  $('.add-to-wishlist').off('click');
  $('.add-to-wishlist').on('click',function(e) {
     e.preventDefault();
    let product_id =$(this).closest('.actions').attr('data-key');
    let CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content')
    $.ajax({
      url:"/wishlist/add-new",
      type: "post",
      data:{
        _token: CSRF_TOKEN,
        product_id:product_id
      },
      success:function (data) {
       console.log(data.message);
      },
      error:function (data) {
       console.log(data.responseJSON.message);
      },
    });

  });
}

Html

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

 <span class="add-to-links add-to-wishlist"> 
    <a title="Add to Wishlist" href="#!" class="button link-wishlist" >
        <span>Ajouter au Wishlist</span>
    </a>
 </span>

Error

{"message":"Unauthenticated."}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

это из-за метода __construct в вашем контроллере этот метод блокирует ваш запрос из-за вашего промежуточного программного обеспечения если вы не хотите входить в систему для запуска этого метода, сделайте следующее:

public function __construct()
{
    $this->middleware('auth')->except(['your_method1','your_method2','...']);
}

после этого ваш метод может работать без входа в систему (в auth middleware)

0 голосов
/ 14 января 2019

Нет необходимости добавлять _token к каждому ajax данным вызова, Вы называете это глобально только один:

$.ajaxSetup({
    headers: { 'X-CSRF-Token' : $('meta[name=csrf-token]').attr('content') }
});

источник: https://laravel.com/docs/5.7/csrf#csrf-x-csrf-token

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...