我无法理解如何使用 Laravel Passport 通过密码客户端为同一用户实现多个连接:
我有一个移动应用程序,需要与基于 Laravel 的 API 进行通信。我的用户在首次启动该应用程序时,必须输入他们的login并password获取access_token.
因此,我认为我需要将密码客户端放入secret我的移动应用程序的代码中,以便能够请求令牌。但是,如果我的用户拥有 iPhone 和 iPad,并且他想从两者登录,该怎么办?
我这样问是因为每次我POST /oauth/token向同一个请求发出请求时password_client,每个access_token请求都会user与我的password_clientgets一起发出revoked。
这意味着,每次我的用户使用他的 iPad 时,他都会与 iPhone 断开连接,因为令牌不再有效?
我错过了什么吗?
我相信 Passport 改变了处理访问令牌创建的方式,并且方法 @issueTokenAccessTokenController不再撤销旧令牌(检查Multiple Access Token)。
我认为此更改是在 @jes\xc3\xbas-lozano-m 答案之前引入的,因此不再需要自定义控制器。
\n\n但是,如果您想撤销旧令牌,现在可以通过设置 Passport Event 的侦听器来实现AccessTokenCreated。
应用程序/提供商/eventServiceProvider.php:
\n\n<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass EventServiceProvider extends ServiceProvider {\n protected $listen = [\n \'Laravel\\Passport\\Events\\AccessTokenCreated\' => [\n \'App\\Listeners\\RevokeOldTokens\'\n ]\n ];\n public function boot() {\n parent::boot();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n应用程序/Listeners/RevokeOldTokens.php:
\n\n<?php\n\nnamespace App\\Listeners;\n\nuse Laravel\\Passport\\Events\\AccessTokenCreated;\nuse Laravel\\Passport\\Client;\nuse Carbon\\Carbon;\n\nclass RevokeOldTokens {\n public function __construct() {\n //\n }\n public function handle(AccessTokenCreated $event) {\n $client = Client::find($event->clientId);\n // delete this client tokens created before one day ago:\n $client->tokens()\n ->where(\'user_id\', $event->userId)\n ->where(\'created_at\', \'<\', Carbon::now()->subDay())\n ->delete();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
6093 次 |
| 最近记录: |