laravel passport 使用 javascript 调用接口出现 302 重定向错误如何解决??

使用 laravel passport 作为 api 认证。使用授权码方式已经申请到了有效token

postman 中运行正常:

clipboard.png

通过 javascript 访问的时候却出现了问题!

clipboard.png

clipboard.png

javascript 代码如下:

clipboard.png

我表示特别无语,为什么 postman 使用 token 都正常,然后 javascript 使用 token 访问却认证不成功进行了重定向!!

阅读 3.9k
1 个回答

当请求包含自定义请求头(有的时候Authorization也被算是自定义头)的时候, 浏览器在发起真正的请求前会以options方式发起preflight请求. 而Laravel没有正确处理好预检请求, 所以就会返回404, 然后web服务器重定向404到错误页面。

下面的解决方式不是非常优雅:
就是添加处理preflight的中间件.

<?php

namespace App\Http\Middleware;

use Closure;

class PreflightResponse
{
    /**
    * Handle an incoming request.
    *
    * @param \Illuminate\Http\Request $request
    * @param \Closure $next
    * @return mixed
    */
    public function handle($request, Closure $next )
    {
        if ($request->getMethod() === "OPTIONS") {
            return response('');
        }

            return $next($request);
     }
 }

然后在App/Http/kernel.php中注册该中间件.

protected $middleware = [
    \App\Http\Middleware\PreflightResponse::class,
    // ...
];

应该就能修复这个问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题