gpt4 book ai didi

php - 尽管 Laravel 中的 token 正确,Ajax 调用仍返回 419 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:27 25 4
gpt4 key购买 nike

我在我的 Laravel 应用程序中使用 Ajax 发出了一堆 POST 请求。

一个典型的请求是这样的:

$.ajax({
url: '/path/to/method',
data: {'id': id},
type: 'POST',
datatype: 'JSON',
success: function (response) {
//handle data
},
error: function (response) {
//handle error
}
});

我设置了 CSRF token ,大部分时间一切正常:

jQuery(document).ready(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
});

但是,在长时间中断后(例如,计算机长时间休眠),所有 Ajax 调用都会返回 419 错误,就好像未设置 token 一样。重新加载页面后,一切恢复正常。这是在本地服务器上。

我该如何解决这个问题?有没有办法在通话前“更新” token ?我是否必须在每次调用之前执行 $.ajaxSetup 位操作?在页面加载时执行一次还不够吗?

最佳答案

这是我的建议:

JS

   //create a function to set header
function setHeader(data){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': data
}
});
}
//in first load of the page set the header
setHeader($('meta[name="csrf-token"]').attr('content'));

//create function to do the ajax request cos we need to recall it when token is expire
function runAjax(data){
$.ajax({
url: '/path/to/method',
data: {'id': id},
type: 'POST',
datatype: 'JSON',
success: function (response) {
//handle data
},
error: function (jqXHR, textStatus, errorThrown) {
if(jqXHR.status==419){//if you get 419 error which meantoken expired
refreshToken(function(){refresh the token
runAjax();//send ajax again
});
}
}
});
}

//token refresh function
function refreshToken(callback){
$.get('refresh-csrf').done(function(data){
setHeader(data);
callback(true);
});
}
//Optional: keep token updated every hour
setInterval(function(){
refreshToken(function(){
console.log("Token refreshed!");
});

}, 3600000); // 1 hour

路线

//route to get the token
Route::get('refresh-csrf', function(){
return csrf_token();
});

希望这对您有所帮助。

关于php - 尽管 Laravel 中的 token 正确,Ajax 调用仍返回 419 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49427563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com