Laravel5でログイン時のイベントでログイン日時を登録する
Laravel5
でログイン時にユーザテーブルにログイン日時を登録する処理を実装します。
users
テーブルにlast_login_at
カラムを日付型で追加しておきます。
追記:いろいろと試した結果複雑な処理になってしまいましたが、結果的にはapp/Providers/EventServiceProvider.php
のboot
に追記するだけでできました。
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.php
のprotected $listen
の値を以下のように変更します。
protected $listen = [
'auth.login' => [
'App\Handlers\Events\AuthLoginEventHandler',
],
];
これでログイン時にログインした社員のlast_login_at
カラムにログイン日時が更新されます。
エラーになってしまう場合は以下のコマンドを実行するとうまくいくと思います。
composer dump-autoload