2017年4月14日金曜日

Laravel5.4で、ログインイベントを取得して、ユーザーのログイン時刻を記録

Laravel5.4で、ログインイベントを取得して、ユーザーのログイン時刻を記録してみました。Laravelは、認証処理で様々なイベントを発生させてくれるので、 EventServiceProviderで、これらのイベントを取得することができるとのこと。

/app/Providers/EventServiceProvider.php
class EventServiceProvider extends ServiceProvider
{
  protected $listen = [
    'Illuminate\Auth\Events\Login' => [
      'App\Listeners\LogSuccessfulLogin',
    ],
  ];
}
その他の取得可能なイベント
protected $listen = [
  'Illuminate\Auth\Events\Registered' => [
    'App\Listeners\LogRegisteredUser',
  ],

  'Illuminate\Auth\Events\Attempting' => [
    'App\Listeners\LogAuthenticationAttempt',
  ],

  'Illuminate\Auth\Events\Authenticated' => [
    'App\Listeners\LogAuthenticated',
  ],

  'Illuminate\Auth\Events\Login' => [
    'App\Listeners\LogSuccessfulLogin',
  ],

  'Illuminate\Auth\Events\Failed' => [
    'App\Listeners\LogFailedLogin',
  ],

  'Illuminate\Auth\Events\Logout' => [
    'App\Listeners\LogSuccessfulLogout',
  ],

  'Illuminate\Auth\Events\Lockout' => [
    'App\Listeners\LogLockout',
  ],
];
$ php artisan event:generate
/app/Listeners/LogSuccessfulLogin.php
use Carbon\Carbon;
use Auth;

class LogSuccessfulLogin
{
  public function handle(Login $event)
  {
    $user = Auth::user();
    $user->last_login_at = Carbon::now();
    $user->save();
  }
}

参考サイト
Recording last login information using Laravel events(Steven Westmorelandさん)
Authentication(Laravel)

0 件のコメント:

コメントを投稿