使用令牌时Ajax中的Laravel TokenMismatchException

时间:2016-07-27 12:31:13

标签: laravel-5.2

我知道我是StackOverflow的初学者,但我遇到了一个难题 好吧,开始做生意我在laravel中遇到令牌麻烦。有时一切顺利,但我有错误:
jquery-2.2.4.min.js:4 POST http://localhost:8000/checkabsence/delete 500(内部服务器错误)

我的js:      $.ajax({ method:"post", url:postDeleteAbsence, data:{ _token:token, absenceid: absenceid } }).done(function(msg) { alert('deleted'); });

我100%确定我正在传递令牌和遗嘱。我的令牌在我的视图中设置:var token = '{{ Session::token() }}';

我的路线:

Route::post('/checkabsence/delete', [
'uses' => 'AbsenceController@postDeleteAbsence',
'as' => 'postDeleteAbsence',
'middleware' => 'auth'
]);

我的控制器:

public function postDeleteAbsence(Request $request) {
   //code
}

我的laravel版本: 5.2.41

在我的上一个项目中,我创建了多个Ajax请求,一切运行良好,现在我收到了这个错误...... 请注意,有时我在非ajax post请求上也会出现令牌不匹配(例如,在第五次请求时它会引发令牌不匹配错误)

我希望你能帮助我,因为我真的不知道该做什么或我做错了什么......

//新闻
我注意到我的数据库中的令牌与我在ajax请求和其他地方使用的令牌不同。

路线: routes

2 个答案:

答案 0 :(得分:0)

使用AJAX时,您必须将标记设置为标题。

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': {{ csrf_token() }}
    }
});

修改

尝试以这种方式添加令牌:

$.ajax({
    method: 'post',
    url: postDeleteAbsence,
    data: {
        absenceid: absenceid
    },
    headers: {
        'X-CSRF-TOKEN': '<?php echo csrf_token(); ?>'
    }
}).done(function(msg) {
    alert('deleted');
});

答案 1 :(得分:0)

我遇到了和你一样的问题。在我的情况下,原因是用户登录时的身份验证。我使用Auth::login($user, true);而不是Auth::login($user);