PHP code example of delickate / user-sessions

1. Go to this page and download the library: Download delickate/user-sessions library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

delickate / user-sessions example snippets


protected $middleware = [
        //...
        //...
        \App\Http\Middleware\SecurityHeaders::class, //SANI: user-sessions
        \App\Http\Middleware\CheckPasswordExpiry::class, //SANI: user-sessions
    ];

protected $middlewareGroups = [
        'web' => [
            //...
            //...
            //\Illuminate\Auth\Middleware\Authenticate::class, 
            'user.sessions',  //SANI: user-sessions
        ],
    ];

protected $routeMiddleware = [
        //...
        //...
        'force.password.change' => \App\Http\Middleware\ForcePasswordChange::class,   //SANI: user-sessions
    ];

use App\Http\Controllers\UserController;
use App\Http\Controllers\UserSessions\UserSessionController;
use App\Http\Controllers\ChangePasswordController;
use App\Http\Controllers\HomeController;

 //SANI: change password
    Route::middleware(['auth'])->group(function () 
    {
        //SANI: user sessions
        Route::get('/sessions', [UserSessionController::class, 'index'])
            ->name('sessions');

        Route::get('/user-sessions/{session_id}/activities', 
        [UserSessionController::class, 'activities']
        )->name('user-sessions.activities');

        Route::get('/user-sessions/{session_id}/audit-logs',
        [UserSessionController::class, 'auditLogs']
        )->name('user-sessions.audit-logs');
    
        //SANI: Change password & their rules
        Route::get('/change-password', [ChangePasswordController::class, 'show'])
        ->name('password.change.form');

        Route::post('/change-password', [ChangePasswordController::class, 'update'])
        ->name('password.change.update');

        //SANI: Forcefully change password
        Route::middleware(['force.password.change'])->group(function () 
        {
            Route::get('/home', [HomeController::class, 'index']);
        });

        //SANI: Exception logs
        Route::get('/test-exception', function () 
        {
            throw new Exception("Test Exception Logging");
        });
    });

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;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
        'password_changed_at'   //SANI: user-sessions
    ];


use App\Models\ExceptionLog;
use Throwable;

    public function register()
    {
        $this->reportable(function (Throwable $e) {
                try {
                ExceptionLog::create([
                    'message' => $e->getMessage(),
                    'file'    => $e->getFile(),
                    'line'    => $e->getLine(),
                    'trace'   => $e->getTraceAsString(),
                    'url'     => request()->fullUrl() ?? null,
                    'method'  => request()->method() ?? null,
                    'ip'      => request()->ip() ?? null,
                    'user_id' => auth()->check() ? auth()->id() : null,
                ]);
            } catch (\Exception $ex) {
                // Prevent infinite loop if DB logging fails
            }
        });
    }

    //SANI: show 500 error on exception
    public function render($request, Throwable $e)
    {
        
        if (app()->environment('production')) 
        {
            return response()->view('errors.500', [], 500);
        }

        return parent::render($request, $e);
    }
bash
> php artisan vendor:publish --tag=user-sessions  --force
bash
php artisan cache:clear
php artisan config:clear
composer dump-autoload
php artisan optimize:clear
bash
php artisan migrate
bash
php artisan vendor:publish --tag=user-sessions  --force
bash
> php artisan session:table (only if session is being store into database.  its optional)
> composer