در بخشهای پیش با نحوه ی ساخت و بروز کردن توکن آشنا شدیم. حال اگر بخواهیم Event هایی در برنامه ی خود در نظر بگیریم که مربوط به Authectication Server ما باشد چه راهی جلوی پای ماست ؟
پاسپورت به صورت پیشفرض هنگام صدور access token و refresh token، دو رویداد را در برنامه ما اعلام میکند. شما میتوانید از این رویدادها برای هرس (prune) یا ابطال (revoke) سایر access tokenها در پایگاه داده خود استفاده کنید. کافی است در EventServiceProvider برنامه خود، listenerهای مورد نیاز را به این رویدادها وصل کنید:
/**
* 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',
],
];
برای این بخش ما میخواهیم یک listener ای بنویسیم که در هنگام ایجاد یک access token در برنامه Todo، اطلاعاتی را لاگ کند. (برای مثال: برای کدام کلاینت و در چه زمانی توکن صادر شده است.)
ابتدا فایل app/Providers/EventServiceProvider.php/ را باز کرده و در قسمت protected $listen مقدار زیر را اضافه میکنیم:
// …
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\LogInfoTokens',
],
];
// …
سپس دستور زیر را اجرا میکنیم تا کلاس listener مربوط به رویداد AccessTokenCreated ایجاد شود:
php artisan event:generate
با اجرای این دستور، فایل listener با نام LogInfoTokens در مسیر app/Listeners/ ایجاد میشود . این فایل را باز کرده و کد زیر را در متد handle آن قرار میدهیم:
// …
/**
* Handle the event.
*
* @param AccessTokenCreated $event
* @return void
*/
public function handle(AccessTokenCreated $event)
{
Lof:info('A token was created for client with client id: '.$event->clientId. ' at: '. Carbon::now());
}
// …
بعد از آن وارد بخش تنظیمات برنامه Todo شده و بر روی لینک Create New Token کلیک کرده و یک توکن جدید ایجاد میکنیم:
بعد از ایجاد توکن، فایل لاگ در مسیر storage/logs/laravel.log/ را باز میکنیم. مشابه شکل زیر، یک لاگ با client id و زمان ایجاد توکن را خواهیم دید.
ما میتوانیم علاوه بر این که با این دو Event پیشفرض، که موقع ساخت و بروز کردن توکن اعلام میشوند. Event های دیگری نیز تعریف کنیم و در برنامه ی خود استفاده کنیم. به خصوص مواقعی که میخواهیم عملیاتی خارج از روال اصلی برنامه و در پس زمینه اتفاق بیافتد.