Laravel使用ajax更新记录获取TokenMismatchException错误

时间:2015-11-14 17:10:48

标签: laravel laravel-5

我尝试使用简单的ajax代码更新记录,例如:

$('[id^="change_user_status_account-"]').click(function () {
    var id = $(this).attr('id').split('-');
    $.ajax({
        type: "POST",
        url: "{{ URL::route('changeUserStatusAccount') }}",
        data: {user_id: id[1]},
        success: function (data) {
            if (data == 1) {
                $("#change_user_status_account-1").text('Enable Account');
            } else {
                $("#change_user_status_account-1").text('Disable Account');
            }
        }
    });
    return false;
});
此ajax中的

var id2且没有问题

但我收到错误:

Whoops, looks like something went wrong.
1/1 TokenMismatchException in VerifyCsrfToken.php line 53:

Firebug错误:

"NetworkError: 500 Internal Server Error - http://localhost/epay-pro/public/changeUserStatusAccount"

我的路线:

Route::post('/changeUserStatusAccount', array(
    'as' => 'changeUserStatusAccount', function () {
            $info = \App\User::find(Request::input('user_id'));
            $status = $info->status == 1 ? 0 : 1;
            $info->status = $status;
            $info->save();
            return $status;
    }
));

我的Html:

<span id="change_user_status_account-{{$contents->id}}">

2 个答案:

答案 0 :(得分:1)

默认情况下,Laravel已为POSTPUTDELETE请求启用了CSRF保护。

因此,您应该将X-CSRF-TOKEN标头传递给ajax请求。

exclude a URI from the CSRF protection,您应该将其添加到$except中间件的VerifyCsrfToken属性中。

答案 1 :(得分:0)

改变:

data: {user_id: id[1]},

data: {user_id: id[1], _token:{{ csrf_token() }}},

或在表单中添加<input type="hidden" name="_token" value="{{ csrf_token() }}">