Bypass Tokens

Bypass tokens provide temporary access to the application during maintenance.

Generation

// CurtainUpCommand.php
protected function generateSecret(): string
{
    return md5(uniqid('', true));
}

Usage

# Generate token with maintenance mode
php artisan curtain:up --secret="custom-token"

# Or let Curtain generate one
php artisan curtain:up
# Output: Bypass token: 1234abc...

Implementation

// CurtainService.php
public function hasValidBypassToken(Request $request): bool
{
    if (!$this->isDownForMaintenance()) {
        return false;
    }

    $data = $this->getMaintenanceData();

    return isset($data['secret']) && 
           $request->path() === $data['secret'];
}

Security Considerations

Token Storage

  • Secure storage in maintenance file

  • Automatic expiration

  • One-time use option

Access Control Flow

public function canAccessPath(Request $request): bool
{
    if (!$this->isDownForMaintenance()) {
        return true;
    }

    // Check path exclusions first
    if ($this->shouldPassThroughPath($request->path())) {
        return true;
    }

    // Check IP whitelist
    if ($this->isAllowedIp($request->ip())) {
        return true;
    }

    // Check bypass token last
    return $this->hasValidBypassToken($request);
}

Best Practices

  • Rotate tokens regularly

  • Limit token lifespan

  • Log access attempts

  • Monitor usage patterns

Last updated