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