laravel - 尝试发布到我的控制器时出现 419 错误
问题描述
我一直在尝试使用 axios 向我的项目控制器提交一个发布请求,但我一直收到错误 419(未知状态)。即使我通过标头将 CSRF 传递给控制器。当我发布后进入我的网络标签时,它说:
X-CSRF-TOKEN: undefined
X-Requested-With: XMLHttpRequest
但是,当我 console.log(window.csrf_token) 它返回一个令牌。
这包含在我的 layout.blade.php 中
<script type="text/javascript">
window.csrf_token = "{{ csrf_token() }}"
</script>
我在我的 app.js 中为 vue 定义了标题:
const axios = require('axios');
axios.defaults.headers.common = {
'X-CSRF-TOKEN': window.csrf_token,
'X-Requested-With': 'XMLHttpRequest',
};
在我的 projects.vue 中,这是我的 axios 发布请求:
Swal.queue([{
title: 'Add a New Project?',
input: 'text',
inputAttributes: {
autocapitalize: 'on'
},
showCancelButton: true,
confirmButtonText: 'Create Project',
showLoaderOnConfirm: true,
preConfirm: (result) => {
return new Promise(function(resolve, reject) {
if (result) {
console.log(result)
axios.post('/api/projects', {title:result})
.then(function(response){
Swal.insertQueueStep({
type: 'success',
title: 'Your project has been created!'
})
resolve();
})
.catch(function(error){
Swal.insertQueueStep({
type: 'error',
title: 'Something went wrong.'
})
console.log(error);
reject();
})
}
});
}
}])
以及 ProjectsController.php 中的 store 方法
public function store()
{
$validated = request()->validate([
'title' => 'required',
]);
Project::create($validated);
return response()->json($validated);
}
解决方案
很可能您在使用后在布局文件中设置了 CSRF 令牌,因此未定义的原因。
尝试使用默认方式,即在主模板中放置一个meta
标签,如下所示:head
<meta name="csrf-token" content="{{ csrf_token() }}">
然后要使用它,您可以打开bootstrap.js
已设置此代码的给定文件:
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
或者,如果这不存在,请将其放入您的app.js
脚本或您在每个页面上使用的任何内容中。
推荐阅读
- python - 无法让 Python3 识别已安装的模块
- unity3d - 在着色器图中访问二级纹理法线贴图?
- .net-core - .net 核心应用程序是否可以有一些带有客户端凭据流的 API 和其他带有 Open ID 连接的 API
- c# - 从 zip 文件 C# 中检索到的文件名无效
- r - RStudio - 无法安装包“xfun”
- android - 在另一个集合中使用来自一个集合的数据 Firestore Android
- typescript - redux saga 生成器/sagas 上的变量赋值
- pandas - python3:如何对列的每三列的列值求和
- python - 如何避免在数据框图中绘制不存在的日期?
- python - 有问题的文件名返回为“.xml”但不存在