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;
}
}
我必须在我的 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;
}
}