diff --git a/app/app/Models/PersonalAccessToken.php b/app/app/Models/PersonalAccessToken.php index e52e8c51..607d90bd 100644 --- a/app/app/Models/PersonalAccessToken.php +++ b/app/app/Models/PersonalAccessToken.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Models; +use Illuminate\Database\QueryException; use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken; /** @@ -28,6 +29,14 @@ class PersonalAccessToken extends SanctumPersonalAccessToken return null; } - return parent::findToken($token); + // В проекте нет таблицы personal_access_tokens (SPA cookie-auth, Sanctum + // PAT не используются). Без этого try/catch любой иной Bearer на + // sanctum-роуте ронял бы запрос в 500 (Undefined table) вместо чистого + // 401. Гасим QueryException до null — guard вернёт 401. + try { + return parent::findToken($token); + } catch (QueryException) { + return null; + } } } diff --git a/app/bootstrap/app.php b/app/bootstrap/app.php index acdd64c3..0434f708 100644 --- a/app/bootstrap/app.php +++ b/app/bootstrap/app.php @@ -2,6 +2,7 @@ use App\Http\Middleware\ApiKeyAuth; use App\Http\Middleware\EnsureSaasAdmin; +use App\Http\Middleware\ImpersonationContext; use App\Http\Middleware\SetTenantContext; use Illuminate\Database\QueryException; use Illuminate\Foundation\Application; @@ -29,7 +30,7 @@ return Application::configure(basePath: dirname(__DIR__)) ]); $middleware->web(append: [ - \App\Http\Middleware\ImpersonationContext::class, + ImpersonationContext::class, ]); // Защитные HTTP-заголовки (CSP, X-Frame-Options, X-Content-Type-Options,