laravel - Laravel Passport 来自同一端点的响应同时来自两个用户的两个不同的 access_tokens 在两种情况下都返回第一个用户
问题描述
我正在使用 Laravel 5.8 和 Passport 7.2 为我的应用程序构建 API。我正在使用 password_grant 进行身份验证。
我已经创建了从注册到登录的所有内容,并且一切似乎都正常运行。我能够获取 access_token 和 refresh_token 并访问附加了中间件 auth:api 的路由。
在我的路线中,我有这个:
Route::group(['middleware' => ['auth:api']], function () {
...
Route::get('test', function (Request $request) {
return $request->user();
});
...
});
当我使用标头 Authorization: Bearer access_token 调用此 /api/test URL 时,我正在获取当前经过身份验证的用户。这很好用。
我正在使用 Postman 测试这些端点,但是如果我使用浏览器中的 javascript 进行测试,一切都是一样的。
问题是当我有来自两个不同用户的两个不同 access_token 时。如果我用一个 access_token 调用这个 URL,我会得到正确的用户数据作为响应,如果我等待几秒钟并用第二个 access_token 调用相同的 URL,我会得到正确的第二个用户数据作为响应。但是,如果我同时使用这两个 access_tokens 调用此 URL 两次(首先调用,例如在第二次调用半秒后),我将首先调用用户数据作为两个请求的响应。
我希望你能明白什么是问题。
这可能是缓存问题,还是会话问题(即使 api 是无状态的)?
如果您需要更多信息,请告诉我。
首先我认为这是浏览器缓存问题,但在邮递员中也是如此。我还尝试使用 Google Chrome 处理一个请求,使用 Mozilla 处理第二个请求,一切都一样。
如果您对可能出现的问题有任何想法,我将不胜感激:D
解决方案
我找到了解决方案。这不是 Laravel 或 Passport 的问题。
问题是:在我的服务器上,我们配置了 Nginx 和https://engintron.com/,并且这个 Engintron 有一些微缓存机制。
此微缓存可以完全禁用,也可以通过请求中的标头禁用(缓存控制:私有)。
微缓存将 GET 请求缓存到 URL 1 秒,并忽略不同的授权标头。这就是为什么如果我在 1 秒内发出这两个请求,我会为两个不同的 Authorization 标头获得相同的用户数据。
我希望这将在未来对其他人有所帮助。如果有人需要更多信息,请随时与我联系:D
推荐阅读
- julia - Julia:如何使直方图对于两个大小相等的向量具有相同数量的 bin?
- c++ - C ++计算字符串中的偶数
- javascript - 在反应中过滤geojson的最佳方法?
- python-3.x - 如果语句未正确打印
- sql - 错误:CASE 类型整数和布尔值无法匹配
- perl - 如何在 Perl 中使用 Weather::NOAA::Alert 解析 CAP id 而不是散列值
- html - “ALT”属性未在图像链接上创建悬停文本
- azure - 如何将一组 vms 以 10 个批量添加到多个资源组
- c# - ASP.NET 引入存储库模式导致“IdentityUserLogin”没有键定义错误
- python - 由于频道名称相同,YouTube API 订阅者计数不正确