Laravel 5 必须在 Kendo UI Grid 中为所有请求发送令牌

Laravel 5 having to send token with all requests in KendoUI Grid

我必须在我的 kendo 网格中为每个网格操作(读取除外)发送 _token,否则我会收到令牌不匹配错误:

...
transport: {
            read: {
                url: '/core/income-grid/read',
                dataType: 'json',
                type: 'get'
            },
            update: {
                url: '/core/income-grid/update',
                dataType: 'json',
                type: 'post',
                data: function(data){
                    data._token = $('#incomeGrid').data('csrf');
                    return data;
                }
            },
            create: {
                url: '/core/income-grid/create',
                dataType: 'json',
                type: 'post',
                data: function(data){
                    data._token = $('#incomeGrid').data('csrf');
                    return data;
                }
            },
            destroy: {
                url: '/core/income-grid/destroy',
                dataType: 'json',
                type: 'post',
                data: function(data){
                    data._token = $('#incomeGrid').data('csrf');
                    return data;
                }
            }
        },
...

有没有办法解决这个问题并且仍然有 csrf 令牌提供的保护?

如果不传递令牌,您无法在 Laravel 中进行 CSRF 保护。

然而,根据 Kendo UI Documentation 有一个名为 transport.parameterMap 的方法允许对请求参数进行操作。这应该允许您在一个地方将令牌作为所有非读取请求的参数,而不必为所有操作单独指定它:

transport: {
    ...,
    parameterMap: function(data, type)
    {
        if (type !== "read")
            data._token = $('#incomeGrid').data('csrf');

        return data;
    }
}