Installation
composer require mylonia/site-guard
Set Password
Add to .env:
SITE_GUARD_PASSWORD=your-secure-password
Apply Middleware
Register in AppServiceProvider (or another provider):
use Mylonia\SiteGuard\SiteGuardMiddleware;
public function boot(Router $router): void
{
$router->pushMiddlewareToGroup('web', SiteGuardMiddleware::class);
}
Test Visit any route—you should see the password prompt.
/admin) are protected before going live.Environment-Based Activation Conditionally apply middleware based on Laravel’s environment:
if ($this->app->environment(['staging', 'local'])) {
$router->pushMiddlewareToGroup('web', SiteGuardMiddleware::class);
}
Route Exclusions
Publish the config and whitelist routes in config/site-guard.php:
'except' => [
'health-check',
'api/*',
],
Custom Password Page Override the default view by publishing assets:
php artisan vendor:publish --provider="Mylonia\SiteGuard\SiteGuardServiceProvider" --tag="views"
Then modify resources/views/vendor/site-guard/password.blade.php.
Dynamic Passwords
Store the password in the database (e.g., configurations table) and fetch it dynamically in the middleware:
$password = Configuration::where('key', 'site_guard_password')->value('value');
auth or throttle for layered security:
$router->pushMiddlewareToGroup('web', [
SiteGuardMiddleware::class,
\App\Http\Middleware\ThrottleRequests::class,
]);
$router->middlewareGroup('api', [
'throttle:api',
// Exclude SiteGuard for API
]);
SITE_GUARD_ENABLED=${APP_ENVIRONMENT} == 'production' ? 'false' : 'true'
Middleware Order Matters
SiteGuardMiddleware before route-specific middleware (e.g., auth) to avoid bypassing the password check.$router->pushMiddlewareToGroup('web', [
\App\Http\Middleware\Authenticate::class, // Runs first!
SiteGuardMiddleware::class,
]);
Caching Issues
config_cache), clear it after publishing config:
php artisan config:clear
SITE_GUARD_PASSWORD is not cached in .env files stored in version control.Case Sensitivity
strtolower() if needed:
if (strtolower($inputPassword) !== strtolower($configPassword)) { ... }
CSRF Token Mismatch
@csrf
web middleware group:
php artisan route:list --show-middleware
SiteGuardMiddleware to track brute-force attempts:
\Log::warning('Failed Site Guard attempt for IP: ' . request()->ip());
Custom Validation Logic Extend the middleware to add rate-limiting or IP restrictions:
if ($this->isBlockedIp(request()->ip())) {
abort(403, 'Access denied.');
}
Multi-Password Support Store multiple passwords in the database and validate against them:
$validPasswords = Password::where('active', true)->pluck('password')->toArray();
if (!in_array($inputPassword, $validPasswords)) { ... }
Password Reset Endpoint
Add a /reset-site-guard-password route with admin-only access to update the password dynamically.
Two-Factor Integration
Combine with Laravel’s two-factor middleware for additional security:
$router->pushMiddlewareToGroup('web', [
SiteGuardMiddleware::class,
\App\Http\Middleware\EnsureTwoFactorAuth::class,
]);
How can I help you explore Laravel packages today?