在我的 Laravel 安装中,我通过 tymondesigns 和barryvdhDingo API
进行了设置。JWT-Auth
Laravel-cors
这是从前端(托管在不同的服务器上)登录和检索数据的过程:
POST
的凭据API
- 接收
JWT
令牌,然后将其localStorage
与Bearer
前面的密钥一起存储。此后,拦截器会自动获取并设置带有JWT
令牌的 Authorization 标头。 POST
请求被发送到/users/me
,这只是一个检索用户数据的路由。用户数据是username, email, permissions and messages
目前自带的。基本上messages
是一个Eloquent
模型。顺便说一句,检索用户数据的方法,读取用户 using然后我使用's将数据发回。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
,第二个是实际请求...
我越来越郁闷了...