omachizura

仕事メモ、役に立ったスキルをまとめています。


Laravel5でログイン時のイベントでログイン日時を登録する

Laravel5でログイン時にユーザテーブルにログイン日時を登録する処理を実装します。usersテーブルにlast_login_atカラムを日付型で追加しておきます。

追記:いろいろと試した結果複雑な処理になってしまいましたが、結果的にはapp/Providers/EventServiceProvider.phpbootに追記するだけでできました。

use Carbon\Carbon; //追加(忘れがちなので注意)

public function boot(DispatcherContract $events)
{
  parent::boot($events);

  //追加↓
  $events->listen('auth.login', function ($user)
  {
    $user->last_login_at = Carbon::now();
    $user->save();
  });
  //追加↑
}

上記の方法で実装できましたので、以下は参考程度にご覧ください。上記の方法で試したのは5.1なので、5.0の場合は以下の方法で行う必要があるかもしれません。

EventHandlerの追加

以下のコマンドを実行し、イベントハンドラーを作成します。

php artisan handler:event AuthLoginEventHandler

コマンド実行後はapp/Handlers/EventsにAuthLoginEventHandler.phpのファイルが作成されると思います。

AuthLoginEventHandlerを以下のように編集します。日付処理はCarbonを使用しています。

<?php namespace App\Handlers\Events;

use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;
use Carbon\Carbon; //追加

class AuthLoginEventHandler {

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

  /**
   * Handle the event.
   *
   * @param  Events  $event
   * @return void
   */
  public function handle($user)
  {
    //ログイン日時を更新
    $user->last_login_at = Carbon::now();
    $user->save();
  }

}

イベントの登録

app/Providers/EventServiceProvider.phpprotected $listenの値を以下のように変更します。

protected $listen = [
  'auth.login' => [
    'App\Handlers\Events\AuthLoginEventHandler',
  ],
];

これでログイン時にログインした社員のlast_login_atカラムにログイン日時が更新されます。

エラーになってしまう場合は以下のコマンドを実行するとうまくいくと思います。

composer dump-autoload