Laravel Passport,通过密码客户端进行多个连接

Ham*_*bot 2 laravel

我无法理解如何使用 Laravel Passport 通过密码客户端为同一用户实现多个连接:

我有一个移动应用程序,需要与基于 Laravel 的 API 进行通信。我的用户在首次启动该应用程序时,必须输入他们的loginpassword获取access_token.

因此,我认为我需要将密码客户端放入secret我的移动应用程序的代码中,以便能够请求令牌。但是,如果我的用户拥有 iPhone 和 iPad,并且他想从两者登录,该怎么办?

我这样问是因为每次我POST /oauth/token向同一个请求发出请求时password_client,每个access_token请求都会user与我的password_clientgets一起发出revoked

这意味着,每次我的用户使用他的 iPad 时,他都会与 iPhone 断开连接,因为令牌不再有效?

我错过了什么吗?

Ric*_*lho 5

我相信 Passport 改变了处理访问令牌创建的方式,并且方法 @issueTokenAccessTokenController不再撤销旧令牌(检查Multiple Access Token)。

\n\n

我认为此更改是在 @jes\xc3\xbas-lozano-m 答案之前引入的,因此不再需要自定义控制器。

\n\n

但是,如果您想撤销旧令牌,现在可以通过设置 Passport Event 的侦听器来实现AccessTokenCreated

\n\n

应用程序/提供商/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}\n
Run 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}\n
Run Code Online (Sandbox Code Playgroud)\n