Installation Run these commands in your Laravel project:
composer require moox/user-session
php artisan mooxuser-session:install
This publishes migrations, config, and sets up the Filament resource for session monitoring.
First Use Case After installation, access the Filament admin panel (if configured) to view active user sessions via the Sessions resource. This provides a real-time dashboard of logged-in users, their devices, and session metadata.
Where to Look First
config/moox-user-session.php – Adjust session tracking settings (e.g., retention policies, user model bindings).database/migrations/ for session-related tables (e.g., user_sessions, session_devices).app/Filament/Resources/UserSessionResource.php to customize columns, filters, or actions.Session Tracking Integration
session middleware to log session creation/termination. No manual intervention is needed for basic usage.SessionRelationService to support polymorphic user relationships (e.g., User, Admin, Vendor):
// config/moox-user-session.php
'user_models' => [
\App\Models\User::class,
\App\Models\Admin::class,
],
Filament Dashboard Customization
php artisan vendor:publish --tag="user-session-filament-resource"
// app/Filament/Resources/UserSessionResource.php
public static function getPages(): array
{
return [
'index' => Pages\ListUserSessions::class,
'view' => Pages\ViewUserSession::class,
// Add custom pages (e.g., for session termination)
'terminate' => Pages\TerminateUserSession::class,
];
}
Device Integration
use Moox\UserDevice\Services\UserDeviceService;
$deviceService = app(UserDeviceService::class);
$device = $deviceService->getDeviceFromRequest(request());
$session->device()->associate($device);
$session->save();
Session Retention Policies
config/moox-user-session.php:
'retention' => [
'days' => 30, // Delete sessions older than 30 days
'queue' => 'default', // Use a queue for cleanup jobs
],
php artisan mooxuser-session:cleanup
Middleware Conflicts
moox/user-session middleware (LogSessionActivity) is placed after Laravel’s web middleware in app/Http/Kernel.php:
'web' => [
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Moox\UserSession\Http\Middleware\LogSessionActivity::class, // <-- Add here
],
Polymorphic User Models
SessionRelationService to fail silently. Always verify:
php artisan mooxuser-session:test-relations
Filament Permissions
config/filament.php for policy bindings.canAccess() method in UserSessionResource.Database Bloat
user_sessions and session_devices tables. Use the retention config to automate cleanup.Log Session Events
Enable debug logging in config/moox-user-session.php:
'debug' => env('MOOX_USER_SESSION_DEBUG', false),
Check storage/logs/laravel.log for session lifecycle events.
Test Session Tracking Use the artisan command to verify session logging:
php artisan mooxuser-session:test
This simulates a session and checks if it’s recorded.
Query Performance Optimize Filament queries by adding indexes to foreign keys in migrations:
$table->foreignId('user_id')->constrained()->index();
$table->foreignId('device_id')->constrained()->index();
Custom Session Data
Extend the UserSession model to store additional fields:
// app/Models/UserSession.php
protected $casts = [
'metadata' => 'json',
];
Access via:
$session->metadata['custom_key'] = 'value';
Event Listeners Listen for session events to trigger actions (e.g., notifications):
// app/Providers/EventServiceProvider.php
protected $listen = [
\Moox\UserSession\Events\SessionStarted::class => [
\App\Listeners\SendSessionNotification::class,
],
];
API Endpoints Expose session data via Laravel API routes:
// routes/api.php
Route::middleware('auth:sanctum')->get('/user/sessions', [SessionController::class, 'index']);
Use the SessionRelationService to fetch sessions for the authenticated user:
$sessions = app(\Moox\UserSession\Services\SessionRelationService::class)
->forUser(auth()->user());
How can I help you explore Laravel packages today?