Laravel + Dingo + JWT + cors 和 OPTIONS 方法

Posted

技术标签:

【中文标题】Laravel + Dingo + JWT + cors 和 OPTIONS 方法【英文标题】:Laravel + Dingo + JWT + cors and OPTIONS method 【发布时间】:2016-06-16 00:32:34 【问题描述】:

在我的 Laravel 安装中,我设置了 Dingo API 以及 tymondesigns 的 JWT-Auth 和 barryvdh 的 Laravel-cors

这是从前端(托管在不同的服务器上)登录和检索数据的过程:

    POSTAPI 的凭据 接收JWT令牌,然后将其存储在localStorage中,前面有Bearer键。此后,拦截器自动获取并设置带有JWT 令牌的授权标头。 POST 请求被发送到/users/me,这只是一个检索用户数据的路由。用户数据目前带有username, email, permissions and messagesmessagesEloquent 模型,其中 User::class 基本上是 hasMany(Message::class)。顺便说一句,检索用户数据的方法,使用$user = JWT::parseToken()->authenticate();读取用户,然后我使用Dingo$this->response()->item($user, new SelfTransformer());将数据发回。

所以在这一点上,一切似乎都运行良好。用户登录,用户对象填充了所有必要的东西,消息表填充了消息。

我正在对消息进行分页,所以目前我一次只收到 1 条消息。

现在的问题是,在这一点之后(在检索用户对象之后),如果我提出另一个请求,让我们对/users/me?messages=2 检索第二页消息,我收到以下错误: No 'Access-Control-Allow-Origin' header is present on the requested resource.

如果我也尝试注销,也会遇到同样的错误。

如果我尝试向已经注册的用户注册,我什至会遇到同样的错误。

所以感觉就像每次在 Laravel 中抛出异常,Access-Control-Allow-Origin 标头不再设置。

这是我的 cors 配置:

return [
    /*
     |--------------------------------------------------------------------------
     | Laravel CORS
     |--------------------------------------------------------------------------
     |

     | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*')
     | to accept any value.
     |
     */
    'supportsCredentials' => true,
    'allowedOrigins' => ['*'],
    'allowedHeaders' => ['Content-Type', 'Accept', 'Authorization', 'X-Requested-With', 'Origin'],
    'allowedMethods' => ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
    'exposedHeaders' => ['Authorization'],
    'maxAge' => 0,
    'hosts' => [],
];

如果我使用 Postman,一切正常。

另外,我注意到在我的网络选项卡中,始终设置了 2 个请求。一个将方法设置为OPTIONS,第二个是实际请求...

我越来越郁闷了……

【问题讨论】:

同样的问题 【参考方案1】:

我不确定。 在您的app/Http/routes.php 中将其放在顶部并查看。

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT');
header("Access-Control-Allow-Headers: Authorization, X-Requested-With,  Content-Type, Accept");

希望对你有帮助!

【讨论】:

【参考方案2】:

这是飞行前的请求,我觉得没问题

【讨论】:

以上是关于Laravel + Dingo + JWT + cors 和 OPTIONS 方法的主要内容,如果未能解决你的问题,请参考以下文章

内部请求需要 Laravel Dingo 身份验证 JWT

jwt api 身份验证如何工作(使用 dingo-laravel)

laravel dingo/api添加jwt-auth认证

php Laravel Dingo API JWT使用电子邮件和获取令牌登录用户

Laravel 5.4+ Dingo +Jwt 快速搭建 API系统

Laravel 5.4 OAuth 与 Dingo 内部请求