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
。
这是从前端(托管在不同的服务器上)登录和检索数据的过程:
POST
API
的凭据
接收JWT
令牌,然后将其存储在localStorage
中,前面有Bearer
键。此后,拦截器自动获取并设置带有JWT
令牌的授权标头。
POST
请求被发送到/users/me
,这只是一个检索用户数据的路由。用户数据目前带有username, email, permissions and messages
。 messages
是 Eloquent
模型,其中 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 方法的主要内容,如果未能解决你的问题,请参考以下文章
jwt api 身份验证如何工作(使用 dingo-laravel)
php Laravel Dingo API JWT使用电子邮件和获取令牌登录用户