cara mendapatkan online users di laravel

Cara Mendapatkan Online Users di Laravel

Pada tutorial kali ini, saya akan memberikan contoh sederhana bagaimana cara mendapatkan semua online users dengan waktu terakhir terlihat di laravel. Anda dapat dengan mudah menggunakan contoh ini dengan versi laravel 6, laravel 7, laravel 8, laravel 9, dan laravel 10.

Di sini, kita akan menambahkan kolom baru “last_seen” di tabel pengguna dan membuat middleware baru untuk web yang akan memeriksa apakah pengguna login maka akan memperbarui waktu terakhir dilihat dan menambahkan kunci untuk online di cache, sehingga kita dapat memeriksa pengguna online atau tidak dengan menggunakan itu. jadi ikuti saja langkah di bawah ini.

Install Laravel

Pertama-tama kita perlu mendapatkan aplikasi versi Laravel yang baru menggunakan perintah di bawah ini, Jadi buka terminal Anda atau command prompt dan jalankan perintah di bawah ini:

composer create-project --prefer-dist laravel/laravel online_users

Setelah itu, buka folder aplikasi laravel yang baru saja dibuat dengan perintah cd online_users.

Konfigurasi Database

Setelah itu, kita akan mengonfigurasi detail database pada file .env. Sesuaikan konfigurasinya dengan sistem kalian. Disini saya akan menggunakan mysql dan dengan nama databasenya yaitu laravel_online_users.

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=laravel_image_upload
DB_USERNAME=root
DB_PASSWORD=

Menambahkan Kolom Baru di Table Users

Di sini, kita akan membuat migrasi baru untuk menambahkan kolom “last_seen” di table users:

php artisan make:migration add_new_column_last_seen

Selanjutnya silakan buka file migrasi yang dihasilkan di database/migrations/xxxx_xx_xx_xxxxxx_add_new_column_last_seen.php. Pada method up(), kita menambahkan field last_seen dengan tipe datanya yaitu timestamp.

<?php
  
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
  
class AddNewColumnLastSeen extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function(Blueprint $table){
            $table->timestamp('last_seen')->nullable();
        });
    } 
  
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
          
    }
}

Sekarang mari kita jalankan perintah migrasi:

php artisan migrate

Kemudian, buka file app/Models/User.php dan cukup tambahkan kolom last_seen pada variable protected $fillable di model User seperti di bawah ini:

protected $fillable = [
     'name', 'email', 'password', 'last_seen'
];

Generate Auth Scaffolding

Di sini, kita akan menggunakan laravel ui untuk membuat auth scaffolding, jadi mari kita jalankan perintah di bawah ini:

composer require laravel/ui --dev

Setelah menginstal paket composer, jalankan perintah di bawah ini:

php artisan ui bootstrap --auth

Terakhir, jalankan perintah npm install dan npm run dev:

npm install
npm run dev

Membuat Middleware

Di sini, kita akan membuat UserActivity untuk memperbarui waktu terakhir kali dilihat dan menambahkan status online, mari kita jalankan perintah di bawah ini:

php artisan make:middleware UserActivity

Sekarang, perbarui code middleware seperti di bawah ini pada file app/Http/Middleware/UserActivity.php:

<?php

namespace App\Http\Middleware;

use App\Models\User;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;
use Symfony\Component\HttpFoundation\Response;


class UserActivity
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        if (Auth::check()) {
            $expiresAt = now()->addMinutes(2); /* keep online for 2 min */
            Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);

            /* last seen */
            User::where('id', Auth::user()->id)->update(['last_seen' => now()]);
        }

        return $next($request);
    }
}

Terakhir, kita daftarkan middleware ini ke file kernel pada bagian grup middleware web. Buka file app/Http/Kernel.php dan tambahkan code berikut.

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    ..........

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\UserActivity::class,
        ],

        'api' => [
            // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
}

Membuat Controller

Sekarang, kita akan membuat file UserController.php dengan menggunakan perintah berikut.

php artisan make:controller UserController

Buka UserControlleryang barusan kita buat di app/Http/Controllers/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;

class UserController extends Controller
{
  /**
   * Display a listing of the resource.
   *
   * @return \Illuminate\Http\Response
   */
  public function index(Request $request)
  {
    $users = User::select("*")
      ->whereNotNull('last_seen')
      ->orderBy('last_seen', 'DESC')
      ->paginate(10);

    return view('users', compact('users'));
  }
}

Membuat Route

Pada langkah ini kita perlu membuat beberapa rute untuk menampilkan fungsi pengguna online. Buka file routes/web.php dan tambahkan code di bawah ini.

<?php

use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/online-user', [UserController::class, 'index']);

Membuat Tampilan

Untuk langkah yang terakhir yaitu kita perlu membuat file blade untuk users. Jadi mari kita buat file baru di resources/views/users.blade.php dan tambahkan code berikut untuk membuat tampilan online users di laravel.

@extends('layouts.app')
  
@section('content')
<div class="container">
    <h1>Cara Mendapatkan Online Users di Laravel - leravio.com</h1>
  
    <table class="table table-bordered data-table">
        <thead>
            <tr>
                <th>No</th>
                <th>Name</th>
                <th>Email</th>
                <th>Last Seen</th>
                <th>Status</th>
            </tr>
        </thead>
        <tbody>
            @foreach($users as $user)
                <tr>
                    <td>{{ $user->id }}</td>
                    <td>{{ $user->name }}</td>
                    <td>{{ $user->email }}</td>
                    <td>
                        {{ Carbon\Carbon::parse($user->last_seen)->diffForHumans() }}
                    </td>
                    <td>
                        @if(Cache::has('user-is-online-' . $user->id))
                            <span class="text-success">Online</span>
                        @else
                            <span class="text-secondary">Offline</span>
                        @endif
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>
</div>
@endsection

Selamat kita sudah bisa mendapatkan online users di laravel. Untuk mencoba aplikasi laravel kita, Anda bisa menjalankan perintah di bawah ini.

php artisan serve

Anda bisa langsung membuka url http://127.0.0.1:8000/online-user di browser untuk mencoba mendapatkan online users di laravel. Dan berikut tampilan dari aplikasi yang kita buat.

tampilan online users di laravel

Jika ada pertanyaan, Anda bisa langsung tulis di kolom komentar di bawah ini.

Leave a Comment

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

Scroll to Top