1. Laravel
  2. PHP

Menyimpan informasi login terakhir di Laravel

Pada tutorial kali ini kita akan membahas bagaimana cara menyimpan informasi login terakhir dari user di Laravel, misalnya tanggal dan ip address pengguna ketika login. Untuk kasus tertentu, informasi ini akan sangat berguna. Misalnya, aplikasi kita memang memerlukan informasi login untuk digunakan pada proses yang lain.

Kita akan membahas bagaimana langkah-langkah menyimpan informasi login terakhir dengan menggunakan Laravel.

Database Migrations

Langkah pertama, kita perlu menambahkan kolom pada table users untuk menyimpan informasi login terakhir dari user.

php artisan make:migration add_login_info_to_users --table=users

Pada contoh ini kita akan menambahkan kolom last_login_at dan last_login_ip untuk menyimpan tanggal terakhir dan ip address user ketika login.

class AddLoginInfoToUsers extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->datetime('last_login_at')->nullable();
            $table->string('last_login_ip')->nullable();
        });
    }

    //
}

Menyimpan informasi login

Untuk menyimpan informasi login ini, terdapat beberapa cara yaitu dengan menggunakan method authenticated pada class LoginController dan menggunakan Event Listener. Kita akan membahas kedua cara tersebut disini.

Event Listener

Laravel memungkinkan kita untuk menangkap event-event yang terjadi pada aplikasi kita. Laravel akan mentrigger beberapa event selama proses autentikasi. Salah satunya adalah event Login (Illuminate\Auth\Events\Login).

Ketika pengguna login ke aplikasi kita, laravel akan mentrigger event Login sehingga kita bisa menggunakan event ini untuk menyimpan informasi login user menggunakan event listener.

Untuk membuat event listener gunakan perintah artisan make:listener. Disini kita akan menggunakan nama RecordLoginInfo untuk event listenernya.

php artisan make:listener RecordLoginInfo

Kemudian update data user dengan menggunakan kode dibawah ini.

<?php

namespace App\Listeners;

use Carbon\Carbon;
use Illuminate\Auth\Events\Login;

class RecordLoginInfo
{
    public function handle(Login $event)
    {
        $event->user->forceFill([
            'last_login_at' => Carbon::now()->toDateTimeString(),
            'last_login_ip' => request()->getClientIp()
        ])->save();
    }
}

Service Provider

Langkah terakhir, daftarkan event handler yang telah kita buat pada proses diatas pada property $listen di class EventServiceProvider.

use App\Listeners\RecordLoginInfo;
use Illuminate\Auth\Events\Login;

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        Login::class => [
            RecordLoginInfo::class
        ]
    ];

    //
}

Method authenticated

Selain menggunakan event listener, kita juga bisa menggunakan method authenticated pada class LoginController. Method authenticated ini akan selalu dieksekusi ketika user login ke aplikasi.

protected function authenticated(Request $request, $user)
{
    $user->forceFill([
        'last_login_at' => Carbon::now()->toDateTimeString(),
        'last_login_ip' => $request->getClientIp()
    ])->save();
}

Dengan kode diatas, setiap kali user login ke aplikasi, kita akan menyimpan tanggal login dan ip address dari pengguna seperti terlihat pada gambar dibawah ini.

Menyimpan informasi login terakhir di Laravel
Comments to: Menyimpan informasi login terakhir di Laravel

    Your email address will not be published. Required fields are marked *

    Attach images - Only PNG, JPG, JPEG and GIF are supported.