我如何通过此文件上传传递 csrf 令牌
How do i pass csrf token with this file upload
我有这个html:
<input id="input-id" type="file" accept=".mp3, .mp4" name="file" class="form-control"><br>
<input type="hidden" id="getfilename" name="uploadedfile" value="">
还有这个 jquery 上传文件的插件:
$("#input-id").fileinput({
maxFileSize: 264000,
uploadUrl: "{{url('/rate/uploadfile')}}",
uploadAsync: true,
allowedFileExtensions: ['mp3', 'mp4', 'mpeg', 'flv'],
maxFileCount: 1,
showUpload: true,
dropZoneEnabled: false
});
以及web中间件组下的路由:
Route::post('rate/uploadfile', 'RateController@uploadfile');
每当我尝试上传文件时,我都会遇到熟悉的错误:
TokenMismatchException in VerifyCsrfToken.php
首先将此代码添加到您的表单中
<input type="hidden" id="csrf_token" name="_token" value="{{ csrf_token() }}">
这会使用 laravel 的 csrf_token() 函数在您的表单上添加一个 csrf 令牌字段。
然后在你的脚本中添加这个
$("#input-id").fileinput({
maxFileSize: 264000,
uploadUrl: "{{url('/rate/uploadfile')}}",
uploadAsync: true,
uploadExtraData:{'_token':$('#csrf_token').val()
allowedFileExtensions: ['mp3', 'mp4', 'mpeg', 'flv'],
maxFileCount: 1,
showUpload: true,
dropZoneEnabled: false
});
如果您使用 http://plugins.krajee.com/file-input 这个插件上传文件,那么 uploadExtraData:{'_token':$("#csrf_token").val()},
这一行应该添加 csrf 令牌作为 ajax 请求的额外 post 参数.希望这有帮助。
您还可以将 csrf_token 添加到每个视图并使用表单中的隐藏输入字段进行保存。为此,请使用元标记将其放在 header 中。
<meta name="_token" content="{{ csrf_token() }}"/>
然后您可以在使用任何脚本函数或任何 ajax 调用时轻松访问该值,方法是:
var meta_token = $("meta[name=_token]");
然后就像 muttalebm 说的,使用 uploadExtraData 你可以做以下事情:
uploadExtraData: meta_token.attr("content")
为了测试开发,您还可以在 VerifyCsrfToken 中间件 class 中添加 url 作为例外,不建议在生产模式下打开您面临不必要的安全风险。但是,如果您是在本地测试而不是在生产模式下,您可以简单地执行以下操作:
protected $except = ['/rate/uploadfile'];
在您的 VerifyCsrfToken class.
这个关注
link
第一步添加元数据
<meta name="csrf-token" content="{{ csrf_token() }}">
第二步
$("#input-id").fileinput({
maxFileSize: 264000,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
uploadUrl: "{{url('/rate/uploadfile')}}",
uploadAsync: true,
allowedFileExtensions: ['mp3', 'mp4', 'mpeg', 'flv'],
maxFileCount: 1,
showUpload: true,
dropZoneEnabled: false});
我尝试了这个 post 中的所有示例,但没有一个好的结果,适合我的配置是
$("#input-id").fileinput({
uploadUrl: "http://127.0.0.1:8000/api/processfile",
enableResumableUpload: true,
allowedFileExtensions : ['json'],
ajaxSettings : {
'headers': {"X-CSRFToken": crf_token},
},
maxFileCount: 10,
showCancel: true,
阅读文档 headers 的正确位置是 ajaxSettings:https://plugins.krajee.com/file-input/plugin-options#ajaxSettings
此代码适用于 python Django 或 flask,我不知道为什么适用于 PHP
ajaxSettings : {
'headers': {"X-CSRF-TOKEN": crf_token},
},
所以为了避免我目前使用的问题
ajaxSettings : {
'headers': {'X-CSRF-TOKEN': crf_token , "X-CSRFToken": crf_token},
},
我有这个html:
<input id="input-id" type="file" accept=".mp3, .mp4" name="file" class="form-control"><br>
<input type="hidden" id="getfilename" name="uploadedfile" value="">
还有这个 jquery 上传文件的插件:
$("#input-id").fileinput({
maxFileSize: 264000,
uploadUrl: "{{url('/rate/uploadfile')}}",
uploadAsync: true,
allowedFileExtensions: ['mp3', 'mp4', 'mpeg', 'flv'],
maxFileCount: 1,
showUpload: true,
dropZoneEnabled: false
});
以及web中间件组下的路由:
Route::post('rate/uploadfile', 'RateController@uploadfile');
每当我尝试上传文件时,我都会遇到熟悉的错误:
TokenMismatchException in VerifyCsrfToken.php
首先将此代码添加到您的表单中
<input type="hidden" id="csrf_token" name="_token" value="{{ csrf_token() }}">
这会使用 laravel 的 csrf_token() 函数在您的表单上添加一个 csrf 令牌字段。
然后在你的脚本中添加这个
$("#input-id").fileinput({
maxFileSize: 264000,
uploadUrl: "{{url('/rate/uploadfile')}}",
uploadAsync: true,
uploadExtraData:{'_token':$('#csrf_token').val()
allowedFileExtensions: ['mp3', 'mp4', 'mpeg', 'flv'],
maxFileCount: 1,
showUpload: true,
dropZoneEnabled: false
});
如果您使用 http://plugins.krajee.com/file-input 这个插件上传文件,那么 uploadExtraData:{'_token':$("#csrf_token").val()},
这一行应该添加 csrf 令牌作为 ajax 请求的额外 post 参数.希望这有帮助。
您还可以将 csrf_token 添加到每个视图并使用表单中的隐藏输入字段进行保存。为此,请使用元标记将其放在 header 中。
<meta name="_token" content="{{ csrf_token() }}"/>
然后您可以在使用任何脚本函数或任何 ajax 调用时轻松访问该值,方法是:
var meta_token = $("meta[name=_token]");
然后就像 muttalebm 说的,使用 uploadExtraData 你可以做以下事情:
uploadExtraData: meta_token.attr("content")
为了测试开发,您还可以在 VerifyCsrfToken 中间件 class 中添加 url 作为例外,不建议在生产模式下打开您面临不必要的安全风险。但是,如果您是在本地测试而不是在生产模式下,您可以简单地执行以下操作:
protected $except = ['/rate/uploadfile'];
在您的 VerifyCsrfToken class.
这个关注 link
第一步添加元数据
<meta name="csrf-token" content="{{ csrf_token() }}">
第二步
$("#input-id").fileinput({
maxFileSize: 264000,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
uploadUrl: "{{url('/rate/uploadfile')}}",
uploadAsync: true,
allowedFileExtensions: ['mp3', 'mp4', 'mpeg', 'flv'],
maxFileCount: 1,
showUpload: true,
dropZoneEnabled: false});
我尝试了这个 post 中的所有示例,但没有一个好的结果,适合我的配置是
$("#input-id").fileinput({
uploadUrl: "http://127.0.0.1:8000/api/processfile",
enableResumableUpload: true,
allowedFileExtensions : ['json'],
ajaxSettings : {
'headers': {"X-CSRFToken": crf_token},
},
maxFileCount: 10,
showCancel: true,
阅读文档 headers 的正确位置是 ajaxSettings:https://plugins.krajee.com/file-input/plugin-options#ajaxSettings
此代码适用于 python Django 或 flask,我不知道为什么适用于 PHP
ajaxSettings : {
'headers': {"X-CSRF-TOKEN": crf_token},
},
所以为了避免我目前使用的问题
ajaxSettings : {
'headers': {'X-CSRF-TOKEN': crf_token , "X-CSRFToken": crf_token},
},