使用laravel做API,passport认证,vue做client。在postman中能够正常获取数据,在vue中报错Access-Control-Allow-Origin
下面是我的代码
laravel AuthServiceProvider.php
public function boot()
{
$this->registerPolicies();
// 配置passport路由
Passport::routes(null,['prefix'=>'api/oauth','middleware'=>'acc.h']);
}
laravel acc.h
中间件
public function handle($request, Closure $next)
{
header("Access-Control-Allow-Origin:*");
return $next($request);
}
php artisan route:list
部分截图
vue js script
axios({
method: 'post',
url: '/oauth/token', // main.js中已经设置了全局的baseURL
data: {
client_id: '2',
client_secret: 'kCvv28qy25rIw5IYvAwpIHNQvBMnH6FElrzxqvqP',
username: 'user1@api.test',
password: '111111',
grant_type: 'password'
}
})
.then(response => {
console.log(response.data)
})
在postman中测试截图
在chrome中测试vue
的截图
问题终于解决了!!!
使用各种方法,捣鼓了两天,最后使用
jquery
的POST
与axios
进行对比,才发现原来默认情况下,axios
将JavaScript对象序列化为JSON
。看文档很重要!!
axios
只是粗略的看了下前面的选项配置,后面部分忽略了,才导致在这个问题上卡了很长的时间。废话少说了,继续!
要发送数据到服务器必须把json格式化为字符串。参见
axios
的Using application/x-www-form-urlencoded format直接贴个解决方法:
首先,服务器上的
Access-Control-Allow-Origin
还是需要的然后就是使用
axios
的推荐解决方法,安装qs
引入
qs
使用
qs.stringify(data)
对要发送的数据进行格式化另外,很感谢楼上两位码友的帮忙!!