#php #laravel
#php #laravel
Вопрос:
Я использую Laravel 5.7 и использую систему аутентификации (из php artisan make: auth).Предположим, в браузере у меня есть 2 вкладки. На первой вкладке я установил кнопку использовать ajax для отправки запроса на сервер и успешного ответа, но когда открываю вторую вкладку и выполняю выход (или login), затем возвращаюсь на первую вкладку (без перезагрузки первой вкладки), пытаюсь выполнить с помощью кнопки отправить запрос, ответом теперь является статус ошибки 419.
Я думаю, есть какая-то проблема с истечением сеанса. Я искал, но нигде мне не стало хорошо.
// tab 1
// front-end js
$("#button").click(function(){
$.ajaxSetup({
headers: {
"X-CSRF-TOKEN": $("meta[name='csrf-token']").attr("content")
}
});
$.ajax({
url: "{{ route('test.post') }}",
type: "post",
dataType: "json",
success: function(response){
console.log(response);
},
error: function(){
alert("error");
}
});
});
//server code
public function post(Request $request){
if(Auth::check()){
return response()->json(["test" => 1]);
}else{
return response()->json(["test" => 0]);
}
}
// first click in tab 1: working normal
// turn on another tab a do log out or log in
// comeback tab 1 and click button: error with 419 status code ???
Теперь я хочу, чтобы после входа в систему или выхода из системы на другой вкладке я все еще мог нажимать кнопку, работающую нормально. Если не удается, есть ли какое-либо решение для сохранения подключения к серверу с помощью ajax, axios … (что-то в этом роде)… для обновления данных во внешнем интерфейсе. Большое вам спасибо
Комментарии:
1. ваш сеанс работает для каждого клиента, а не для каждой вкладки. таким образом, вы не можете выйти из системы на одной вкладке и ожидать, что вы не выйдете из системы на другой вкладке.
Ответ №1:
Laravel использует токены csrf для защиты вашего приложения от атак с подделкой межсайтовых запросов (CSRF). У каждой сессии появляется новый csrf-токен. В вашем случае вы используете 2 вкладки, на второй вкладке вы выполняете вход в систему и выход из системы. Итак, после входа / выхода из системы ваш csrf-токен истек для вкладки 1, вам нужно обновить эту вкладку, чтобы вы могли получить новый csrf-токен для сеанса. Или вы можете исключить свой маршрут из защиты csrfhttps://laravel.com/docs/5.8/csrf#csrf-excluding-uris просто добавьте свой маршрут в app / Http / Middleware /VerifyCsrfToken $except array.