Срок действия токена csrf истек до отправки формы - PullRequest
0 голосов
/ 14 октября 2019

8 У меня есть форма, и я использовал {!! csrf_field()!!} У меня есть 2 элемента выбора, один для штата и один для города, когда выбор штата изменяет отправку ajax и дает новые города

, если этот запрос ajaxне выполняется, у нас нет проблем, но если запрос ajax отправлен, то при отправке формы мы выдаем ошибку с истекшим сроком 419 страниц, это код ajax

$('#state').change(function () {
    var state_id = $(this).val();
    $.ajax({
        type: 'get',
        url: '/panel/selectCitiesByStateId/' + state_id,
        data: {'nothing': 'nothing'},
        timeout: 25000,
        error: function () {
            alert('sorry error');
        },
        success: function (res) {
            res = JSON.parse(res);
            var entires = Object.entries(res);
            var htmlOptionElements = '';
            for (var i = 0; i < entires.length; i++) {
                var city = entires[i];
                htmlOptionElements += '<option value="' + city[1] + '">' + city[0] + "</option>";
            }
            $('#city_id').html(htmlOptionElements);
        }
    })
});

это верхние коды формы

<form action="{{route('admin.job.update',['job'=>$job->slug])}}"
      method="post" enctype="multipart/form-data" id="jobForm">
    {!! csrf_field() !!}
    {!! method_field('patch') !!}

это отдельные коды

<div class="col-sm-6">
    <label for="" class="control-label">state*</label>
    <select name="state_id" id="state" class="form-control">
        @foreach($states as $state)
            <option value="{{$state->id}}"
                @if($state->id==@$job->state_id)
                    selected
                @endif
            >{{$state->name}}</option>
        @endforeach
    </select>
</div>
<div class="col-sm-6">
    <label for="" class="control-label">city*</label>
    <select name="city_id" id="city_id" class="form-control">
        @foreach($job->state->cities as $city)
            <option value="{{$city->id}}"
                @if(@$job->city->id==$city->id)
                    selected
                @endif
            >{{$city->name}}</option>
        @endforeach
    </select>
</div>

1 Ответ

0 голосов
/ 14 октября 2019

хорошо,

один токен csrf можно использовать один раз. и токен csrf, сгенерированный запросом get.

при загрузке формы с помощью запроса get, токен сгенерировал и заполнил поле csrf формы.

, когда ajax сработал при изменении #state,Вы отправляете запрос на получение в систему. это означает, что будет сгенерирован новый токен csrf.

Именно поэтому, когда вы отправляете запрос (вы уже отправляете запрос на получение ajax), вы получаете ошибку 419.

Эту проблему можно решить с помощьюотправка почтового запроса в ajax для #state и отключение проверки csrf для маршрута.

Это может решить вашу проблему.

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