为了账号安全,请及时绑定邮箱和手机立即绑定

laravel 跨域,预检请求未通过

laravel 跨域,预检请求未通过

PHP
缥缈止盈 2019-03-18 18:03:14
前端发送请求,请求头带上authorization的时候,没办法接收到,报错显示貌似是跨域错误。检测登录没有问题,我分析了下,登录属于简单请求,未进行进行预检请求所以没什么问题。求思路... cors中间件 public function handle($request, Closure $next) { $response = $next($request); $response->header('Access-Control-Allow-Origin', '*'); $response->header('Access-Control-Allow-Headers', 'X-Requested-With,Origin, Content-Type, Cookie, Accept,Authorization'); $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS'); $response->header('Access-Control-Allow-Credentials', 'true'); $response->header('withCredentials', 'true'); return $response; } 报错详细:
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

问题已解决,原因是:

dingo/api 组件影响了原本的请求响应

解决思路:

  • 从响应来看,返回的状态码是200,说明预检请求已经到达了服务器,只不过被服务器断否认掉了

  • 这里我饶了很大个弯子,以为预检请求被否就意味着后端配置错误,所以一直在检查前后端的配置,但是都没起作用

  • 吃个饭回来觉得还是从这个option请求入手,得先让他通过,尝试着单独写一个路由去匹配这个请求,并返回相应的请求头

Route::options('api/user/12',function(){
    return response('ok')
                     ->header('Access-Control-Allow-Methods','POST, GET, OPTIONS, PUT,         DELETE')
                     ->header('Access-Control-Allow-Headers','Content-Type, X-Auth-Token, Origin');
})->middleware('crouss.request');
  • 单独请求居然成功了。难道是自定义的中间除了问题?然后我单独在中间去做响应处理,结果没有得到响应

  • 这说明在我这个路由中间件之前肯定发生了些什么,那就肯定只有dingo/api了

  • 说来也巧,在看别人怎么解决laravel cros的时候,发现他们在使用一个barryvdh/laravel-cors的包,我原本想着如果我自定义的中间件不能用,只能借用它的啦。

  • 在分析这个包的同时,我发现有使用者配置的时候提出一个坑,需要将这个包作为中间件写在dinggo/api的配置文件中,恍然大悟

答案:在dingo/api配置文件config/api.php中加入中间件

` 'middleware' => [

    'crouss.request' => \App\Http\Middleware\EnableCrossRequestMiddleware::class,
  ],`

===========================================================

查看完整回答
反对 回复 2019-03-18
?
青春有我

TA贡献1784条经验 获得超8个赞

我之前也遇到过,google了很多。
自定义middleware是没办法解决的,你要把他写在routes/api.php或routes/web.php的头部才可以。

查看完整回答
反对 回复 2019-03-18
?
慕容708150

TA贡献1831条经验 获得超4个赞

查看laravel-cors的包的源码就发现了,哪里有$response->header方法?是$response->headers->set吧

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 586 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信