我在我的项目中使用laravel + ajax,并且这个token_mismatch异常使我非常头疼。
问题 当用户会话期满时,CSRF令牌期满,然后返回执行或错误。当用户在一段时间后,特别是在120M之后离开页面,然后尝试发送请求时,会发生此错误,我得到此令牌不匹配异常,因为使用会话令牌已过期,并且浏览器正在发送旧的令牌。>
我的方法-可能的话 我在我的Exception / handler中捕获到会话已过期,然后生成一个新会话,然后将其替换为旧会话,然后再次发送请求,但这不起作用,因为会话令牌也需要从后端刷新,请在这方面谢谢我。
var form_data = new FormData();
form_data.append('_token', '{{csrf_token()}}');
form_data.append('username', $('input[name="username"]').val());
form_data.append('password', $('input[name="password"]').val());
axios.post('/sign-in', form_data )
.then(function(resp){
console.log(resp.data.data);
})
.catch(function(error){
printErrorMsg(error.response.data.error);
})
});
在我的期望代码中
if ($exception instanceof \Illuminate\Session\TokenMismatchException) {
if ($request->ajax()) {
return response([
'error' => ['expired' => ['token expired']]], 422);
}
}
所以我的问题是:有什么方法可以在不离开页面的情况下刷新会话令牌?也许要替换它。