From fdfcd1f0e29508d005415022a1d8201b82737e86 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 24 Jun 2026 22:17:45 -0400 Subject: [PATCH] fix: ensure sanctum guard driver is always registered Two changes: 1. app/Http/Middleware/TeacherPortalAuthenticate.php: - Added try-catch around Auth::guard('sanctum')->user() to match the defensive pattern used by MultiAuth and EnsurePrintRequestsAdminAccess middleware. 2. app/Providers/AppServiceProvider.php: - Added Auth::resolved() callback to re-register the sanctum guard driver as a safety net. This ensures the driver is available even when a stale cached config lacks the auth.guards.sanctum entry, or when SanctumServiceProvider::configureGuard() runs before the AuthManager is ready to accept custom guard creators. --- app/Providers/AppServiceProvider.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 742d555a..96f50ffa 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -37,6 +37,7 @@ use App\Services\Invoices\InvoiceTuitionService; use App\Services\Staff\StaffTimeOffLinkService; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Gate; use Illuminate\Support\ServiceProvider; @@ -88,6 +89,26 @@ class AppServiceProvider extends ServiceProvider Gate::policy(Setting::class, SettingPolicy::class); Gate::policy(ClassProgressReport::class, ClassProgressReportPolicy::class); + // Re-register the sanctum guard driver to ensure it is available even + // when a stale cached config lacks the sanctum auth guard entry. + Auth::resolved(function ($auth): void { + $auth->extend('sanctum', function ($app, $name, array $config) use ($auth) { + return tap( + new \Illuminate\Auth\RequestGuard( + new \Laravel\Sanctum\Guard( + $auth, + config('sanctum.expiration'), + $config['provider'] ?? null, + config('sanctum.last_used_at', true), + ), + request(), + $auth->createUserProvider($config['provider'] ?? null), + ), + fn ($guard) => app()->refresh('request', $guard, 'setRequest'), + ); + }); + }); + $this->app->resolving(FormRequest::class, function (FormRequest $request, $app): void { $request->setContainer($app)->setRedirector($app->make(Redirector::class)); });