我已经厌倦了ajax漫长的发送请求样式,我在SPA项目上使用了axios,它非常酷,我检查了您的文档以查看其工作原理和效果,但是,如果我尝试发出请求它会拖出一个未经身份验证的错误,我正在使用Laravel php框架作为我的代码后端,如果我尝试直接在ajax上运行它,它会起作用,或者也可以在一个正常形式下起作用。
另外,我在任何地方都没有任何身份验证中间设置。
这是Axios Library库的文档
这是我的示例代码
FROM jekyll/builder as build
WORKDIR /tmp
COPY . /tmp
RUN jekyll build
FROM pierrezemb/gostatic
COPY --from=build /tmp/_site /srv/http
我只返回控制器中的所有请求,并不特殊
所以我的问题是axios或laravel是否有问题,或者我不能在没有任何SPA框架(例如react,vue等)的情况下使用axios。
谢谢。
答案 0 :(得分:1)
它未经身份验证,因为您没有在标题中设置X-CSRF-TOKEN
。
您要在config对象上设置X-CSRF-TOKEN
属性,但这是没有意义的。
axios.get('/home', {} , {
headers: {
'X-CSRF-TOKEN' : "{{csrf_token()}}",
// X-Requested-With is an ugly hack and you should use an Accept header instead of this (not as well as!)
'X-Requested-With': 'XMLHttpRequest',
'Accept' : 'application/json',
// You're making a GET request. There is no request body to describe the content-type of.
// 'Content-Type' : 'application/x-www-form-urlencoded',
}
})
答案 1 :(得分:1)
如果您的axios配置位于js文件中,则必须执行以下步骤
1-您必须将此元数据放在页面布局标题中
<meta name="csrf-token" content="{{ csrf_token() }}">
2-然后更改
'X-CSRF-TOKEN' : "{{csrf_token()}}",
到
'X-CSRF-TOKEN' :document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
在您的js文件中
并对其进行测试,如果它起作用了,那么您的问题是因为js文件不是刀片文件,因此您的axios配置中的{{csrf_token()}}不会被laravel渲染为csrf令牌