laravel护照撤销和修剪事件监听器没有做任何事情 [英] laravel passport revoke and prune event listener is not doing anything

查看:164
本文介绍了laravel护照撤销和修剪事件监听器没有做任何事情的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've added this two event listeners to my : 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中,我有:

And in my AuthServiceProvider I have :

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

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

    }

我希望护照撤消所有其他用户访问令牌,然后在撤消它们时修剪它们.但是没有任何反应,每次我向邮递员索取访问令牌时,数据库中都有多个访问令牌时,我会得到一个新的访问令牌.

I want passport to revoke all other user access tokens and then prune them if they are revoked. but nothing is happening and every time I request an access token from postman I get a new access Token while there are several access tokens in the database.

推荐答案

我已通过以下方式解决了我的问题: 步骤1-在EventServiceProvider中,应将路径更改为创建的访问令牌,并刷新创建的令牌:

I've Solved My problem This way : Step1 - In EventServiceProvider should change the path to the Access Token created and also refresh token created :

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

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

Step2-生成这两个侦听器事件:

Step2- generate this two listeners events :

php artisan event:generate

Step3-修改AccessTokenCreated& RefreshTokenCreated事件处理方法:

Step3- Modify AccessTokenCreated & RefreshTokenCreated event handle methods :

RevokeOldTokens类:

RevokeOldTokens Class :

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类:

PruneOldTokens Class :

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]);

    }
}

执行完此步骤后,如果我向我的项目发送任何请求,它将检查令牌,如果有另一个令牌,它将吊销它并使它不被授权.

After This steps if I send any request to my project it will check for tokens and if there is another token it will revoke it and make it unathorized.

这篇关于laravel护照撤销和修剪事件监听器没有做任何事情的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆