使用表单数据添加 laravel CSRF 令牌
Adding laravel CSRF token with form data
通过所见即所得编辑器上传图像时,我需要使用 FormData()
传递 Laravel CSRF 令牌。但它似乎失败了,或者它没有使用 append()
方法添加 csrf 令牌。
这是我的代码:
function uploadImage( image ) {
var data = new FormData();
data.append( "image", image );
data.append( "csrfToken", Laravel.csrfToken ); // <- adding csrf token
// Laravel.csrfToken will return the csrf token.
console.log( data.entries() );
$.ajax ({
data: data,
type: "POST",
url: "/article/store/image",
cache: false,
contentType: false,
processData: false,
success: function(url) {
var image = IMAGE_PATH + url;
$( '#editor' ).summernote( "insertImage", image );
},
error: function( data ) {
console.log( data );
}
});
}
它没有在表单数据中添加 laravel csrf 令牌,因为我仍然收到错误
TokenMismatchException in VerifyCsrfToken.php line 68
如何在表单数据中添加token?
您应该添加一个名为 - _token
的字段,而不是像这样的 csrfToken
:
data.append( "_token", Laravel.csrfToken ); // <- adding csrf token
这就是 Laravel 的辅助方法 - csrf_field()
所做的。
根据 Laravel Docs,在调用 Ajax 的情况下 - 例如,您可以将令牌存储在 HTML 元标记中::
<meta name="csrf-token" content="{{ csrf_token() }}">
然后像这样在您的 ajax header 中包含:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
希望对您有所帮助!
对于ajax个请求,我喜欢用$.ajaxSetup.
设置一次
在我的布局中:
<meta name="csrf-token" content="{{ csrf_token() }}">
在我的 app.js:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
这让我不必记住将 _token 输入附加到每个请求。
虽然@Saumya 已经回答了这个问题,但我使用 headers 发送 CSRF 令牌,如下所示:
$.ajax ({
data: data,
type: "POST",
headers: {'X-CSRF-TOKEN': Laravel.csrfToken },
url: "/article/store/image",
cache: false,
contentType: false,
processData: false,
success: function(url) {
var image = IMAGE_PATH + url;
$( '#editor' ).summernote( "insertImage", image );
},
error: function( data ) {
console.log( data );
}
});
如果您使用 ajax 在整个应用程序中发送多个请求,您可以一次为每个请求进行全局设置:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': Laravel.csrfToken
}
});
了解更多Here
通过所见即所得编辑器上传图像时,我需要使用 FormData()
传递 Laravel CSRF 令牌。但它似乎失败了,或者它没有使用 append()
方法添加 csrf 令牌。
这是我的代码:
function uploadImage( image ) {
var data = new FormData();
data.append( "image", image );
data.append( "csrfToken", Laravel.csrfToken ); // <- adding csrf token
// Laravel.csrfToken will return the csrf token.
console.log( data.entries() );
$.ajax ({
data: data,
type: "POST",
url: "/article/store/image",
cache: false,
contentType: false,
processData: false,
success: function(url) {
var image = IMAGE_PATH + url;
$( '#editor' ).summernote( "insertImage", image );
},
error: function( data ) {
console.log( data );
}
});
}
它没有在表单数据中添加 laravel csrf 令牌,因为我仍然收到错误
TokenMismatchException in VerifyCsrfToken.php line 68
如何在表单数据中添加token?
您应该添加一个名为 - _token
的字段,而不是像这样的 csrfToken
:
data.append( "_token", Laravel.csrfToken ); // <- adding csrf token
这就是 Laravel 的辅助方法 - csrf_field()
所做的。
根据 Laravel Docs,在调用 Ajax 的情况下 - 例如,您可以将令牌存储在 HTML 元标记中::
<meta name="csrf-token" content="{{ csrf_token() }}">
然后像这样在您的 ajax header 中包含:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
希望对您有所帮助!
对于ajax个请求,我喜欢用$.ajaxSetup.
设置一次在我的布局中:
<meta name="csrf-token" content="{{ csrf_token() }}">
在我的 app.js:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
这让我不必记住将 _token 输入附加到每个请求。
虽然@Saumya 已经回答了这个问题,但我使用 headers 发送 CSRF 令牌,如下所示:
$.ajax ({
data: data,
type: "POST",
headers: {'X-CSRF-TOKEN': Laravel.csrfToken },
url: "/article/store/image",
cache: false,
contentType: false,
processData: false,
success: function(url) {
var image = IMAGE_PATH + url;
$( '#editor' ).summernote( "insertImage", image );
},
error: function( data ) {
console.log( data );
}
});
如果您使用 ajax 在整个应用程序中发送多个请求,您可以一次为每个请求进行全局设置:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': Laravel.csrfToken
}
});
了解更多Here