Hello Devs,
In this tutorial, we are going to learn how to check user online status and last seen in laravel application.
Follow this step by step guide given below:
Step 1 :
Install Laravel App
composer create-project --prefer-dist laravel/laravel blog
Step 2 :
Setup Database Configuration open ".env" file and change the database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=Enter_Your_Database_Name
DB_USERNAME=Enter_Your_Database_Username
DB_PASSWORD=Enter_Your_Database_Password
Step 3 :
Generate Auth
Step 4 :
Add Column in User Table
php artisan make:migration add_last_seen_to_users_table --table=users
Run this command:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddLastSeenToUsersTable 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()
{
Schema::table('users', function (Blueprint $table) {
$table->timestamp('last_seen');
});
}
}
Run this command:
php artian migrate
Step 5 :
Create Middleware
php artisan make:middleware LastSeenUserActivity
app/http/middleware/LastSeenUserActivity.php
<?php
namespace App\Http\Middleware;
use Closure;
use App\User;
use Auth;
use Cache;
use Carbon\Carbon;
class LastSeenUserActivity
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check()) {
$expireTime = Carbon::now()->addMinute(1); // keep online for 1 min
Cache::put('is_online'.Auth::user()->id, true, $expireTime);
//Last Seen
User::where('id', Auth::user()->id)->update(['last_seen' => Carbon::now()]);
}
return $next($request);
}
}
Step 5 :
Add Middleware in Kernel File app/http/kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\LastSeenUserActivity::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
Step 6 :
Add Route routes/web.php
Route::get('/status', 'UserController@show')
Step 7 :
Create Controller app/http/controller/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Cache;
use Carbon\Carbon;
class UserController extends Controller
{
public function show()
{
$users = User::all();
return view('status', compact('users'));
}
}
Step 8 :
Create View File app/http/controller/UserController.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header bg-info text-white text-center"><h2><b>How to Check User Online Status & Last Seen in Laravel - Rathorji.in</b></h2></div>
<div class="card-body">
@php $users = DB::table('users')->get(); @endphp
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Status</th>
<th>Last Seen</th>
</tr>
</thead>
<tbody>
@foreach($users as $user)
<tr>
<td>{{$user->name}}</td>
<td>{{$user->email}}</td>
<td>
@if(Cache::has('is_online' . $user->id))
<span class="text-success">Online</span>
@else
<span class="text-secondary">Offline</span>
@endif
</td>
<td>{{ \Carbon\Carbon::parse($user->last_seen)->diffForHumans() }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
Run this command:
php artisan serve
Open this URL:
http://localhost:8000/status
I hope this example helps you.