php - laravel 护照撤销和修剪事件监听器没有执行任何操作

标签 php laravel oauth-2.0 laravel-5.3 laravel-passport

我已将这两个事件监听器添加到我的:EventServiceProvider

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    'Laravel\Passport\Events\AccessTokenCreated' => [
        'App\Listeners\RevokeOldTokens',
    ],

    'Laravel\Passport\Events\RefreshTokenCreated' => [
        'App\Listeners\PruneOldTokens',
    ],
];

在我的 AuthServiceProvider 中我有:

 public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
        passport::$revokeOtherTokens;
        passport::$pruneRevokedTokens;
        Passport::tokensExpireIn(Carbon::now()->addDays(1));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(2));

    }

我希望 Passport 撤销所有其他用户访问 token ,然后在撤销时删除它们。但什么也没有发生,每次我向 postman 请求访问 token 时,我都会得到一个新的访问 token ,而数据库中有多个访问 token 。

最佳答案

我这样解决了我的问题: 第 1 步 - 在 EventServiceProvider 中应更改创建的访问 token 的路径并刷新创建的 token :

 protected $listen = [
        'Laravel\Passport\Events\AccessTokenCreated' => [
            'App\Listeners\RevokeOldTokens',
        ],

        'Laravel\Passport\Events\RefreshTokenCreated' => [
            'App\Listeners\PruneOldTokens',
        ],
    ];

第2步-生成这两个监听器事件:

php artisan event:generate

第3步-修改AccessTokenCreatedRefreshTokenCreated事件处理方法:

RevokeOldTokens 类:

namespace App\Listeners;

use Laravel\Passport\Events\AccessTokenCreated;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use DB;

class RevokeOldTokens
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  AccessTokenCreated  $event
     * @return void
     */
    public function handle(AccessTokenCreated $event)
    {


        DB::table('oauth_access_tokens')
            ->where('id', '<>', $event->tokenId)
            ->where('user_id', $event->userId)
            ->where('client_id', $event->clientId)
            ->update(['revoked' => true]);


    }
}

PruneOldTokens 类:

namespace App\Listeners;

use Laravel\Passport\Events\RefreshTokenCreated;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use DB;

class PruneOldTokens
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  RefreshTokenCreated  $event
     * @return void
     */
    public function handle(RefreshTokenCreated $event)
    {

        DB::table('oauth_refresh_tokens')
            ->where('id', '<>', $event->refreshTokenId)
            ->where('access_token_id', '<>', $event->accessTokenId)
            ->update(['revoked' => true]);

    }
}

在此步骤之后,如果我向我的项目发送任何请求,它将检查 token ,如果存在另一个 token ,它将撤销它并使其未经授权。

关于php - laravel 护照撤销和修剪事件监听器没有执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40758505/

相关文章:

java - RestController 在 oauth2 Spring Boot 中不起作用

C#:Base64编码

php - L5.6 - 数据透视表上的关系

oauth - 如何从 Windows Live 获取用户的联系人电子邮件数据?

Laravel Sum 一个包含多个项目的集合

php - 在 Laravel 框架中拆分字符串

c++ - 从 C++ 应用程序打开 Objective-C 窗口

javascript - 如何延迟 php 中输入字段的搜索功能,使其仅在键入 3 个字符后才开始搜索?

javascript - 是否可以发送 localStorage 数据,然后再次检索它? Ajax ?

php - 闭包参数和 'use' 关键字有什么区别?