ahmadajah03 Fri Aug 2021 1 year ago

Contoh Membuat User Online di Laravel

Hari ini, saya ingin menunjukkan cara mendapatkan users online di laravel. Kami akan melihat contoh laravel mendapatkan semua users yang masuk. Anda akan belajar laravel memeriksa user secara online. Kami akan menggunakan laravel get online users. Mari kita mulai dengan laravel memeriksa apakah user online atau tidak.

Dalam tutorial ini, saya akan memberikan contoh sederhana tentang cara mendapatkan semua user online dengan waktu terakhir terlihat di laravel. Anda dapat dengan mudah menggunakan contoh ini dengan versi laravel 6, laravel 7 dan laravel 8.

Di sini, kita akan menambahkan kolom baru "last_seen" di tabel users dan membuat middleware baru untuk web yang akan memeriksa apakah user login kemudian akan memperbarui waktu last_seen dan menambahkan kunci untuk online di cache, sehingga kita dapat memeriksa user online atau tidak menggunakannya. jadi ikuti saja langkah di bawah ini dan lakukan sekarang:

Langkah 1: Instal Laravel

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

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

Langkah 2: Tambahkan Field Baru ke Tabel Users

di sini, kami akan membuat migrasi baru untuk menambahkan filed "last_seen":

php artisan make:migration add_new_column_last_seen

database/migrations/2021_07_12_032305_add_new_column_last_seen.php

<?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 migration:

php artisan migrate

sekarang, tambahkan saja filed last_seen pada model User seperti di bawah ini:

app/Model/User.php

<?php
  
namespace App\Models;
  
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
  
class User extends Authenticatable
{
    use HasFactory, Notifiable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'last_seen'
    ];
  
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
  
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

Langkah 3: Generate Auth Scaffolding

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

composer require laravel/ui --dev

setelah menginstal paket komposer, jalankan perintah di bawah ini:

php artisan ui bootstrap --auth

sekarang, jalankan perintah instal npm:

npm i && npm run dev

Langkah 4: Buat Middleware

di sini, kami akan membuat UserActivity untuk memperbarui waktu terakhir terlihat dan menambahkan status online, mari jalankan perintah di bawah ini:

php artisan make:Middleware UserActivity

sekarang, perbarui kode middleware seperti di bawah ini:

app/Http/Middleware/UserActivity.php

<?php
  
namespace App\Http\Middleware;
  
use Closure;
use Illuminate\Http\Request;
use Auth;
use Cache;
use App\Models\User;
  
class UserActivity
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        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);
    }
}

sekarang daftar, middleware ini ke file kernel:

app/Http/Kernel.php

<?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\RestrictIpAddressMiddleware::class,
            \App\Http\Middleware\UserActivity::class,
        ],
  
        'api' => [
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
    ...........
}

Langkah 5: Buat Route

Pada langkah ini kita perlu membuat beberapa route untuk menampilkan fungsi user online.

routes/web.php

<?php
  
use Illuminate\Support\Facades\Route;
  
use App\Http\Controllers\UserController;
  
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create 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']);

Langkah 6: Buat Controller

pada langkah ini, kita perlu membuat UserController dan menambahkan kode berikut pada file itu:

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'));
    }
}

Langkah 7: Buat File Blade

di sini, kita perlu membuat file blade untuk users. jadi mari kita buat satu per satu file:

resources/views/users.blade.php

@extends('layouts.app')
  
@section('content')
<div class="container">
    <h1>Laravel Display Online Users - Medikre.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

Sekarang kita siap untuk menjalankan contoh kita dan login dengan user. jadi jalankan perintah di bawah ini jadi jalankan dengan cepat:

php artisan serve

Sekarang Anda dapat membuka URL di bawah ini di browser Anda:

localhost:8000/online-user

saya harap dapat membantu anda...

 

get user online laravel example mendapatkan user online pada laravel laravel