Files
alrahma_sunday_school_api/app/Providers/AppServiceProvider.php
T
root fdfcd1f0e2
API CI/CD / Validate (composer + pint) (push) Successful in 2m6s
API CI/CD / Build frontend assets (push) Successful in 2m20s
API CI/CD / Security audit (push) Successful in 32s
API CI/CD / Test (PHPUnit) (push) Failing after 2m17s
API CI/CD / Deploy to shared hosting (PHP) (push) Has been skipped
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.
2026-06-24 22:17:45 -04:00

117 lines
4.8 KiB
PHP

<?php
namespace App\Providers;
use App\Models\ClassProgressReport;
use App\Models\ClassSection;
use App\Models\IpAttempt;
use App\Models\LateSlipLog;
use App\Models\Message;
use App\Models\NavItem;
use App\Models\Preferences;
use App\Models\Setting;
use App\Models\Staff;
use App\Models\SupportRequest;
use App\Policies\ClassProgressReportPolicy;
use App\Policies\ClassSectionPolicy;
use App\Policies\IpAttemptPolicy;
use App\Policies\LateSlipLogPolicy;
use App\Policies\MessagePolicy;
use App\Policies\NavItemPolicy;
use App\Policies\PreferencesPolicy;
use App\Policies\SettingPolicy;
use App\Policies\StaffPolicy;
use App\Policies\SupportRequestPolicy;
use App\Services\ApplicationUrlService;
use App\Services\Attendance\AttendanceAutoPublishService;
use App\Services\Attendance\AttendancePolicyService;
use App\Services\Attendance\AttendanceRecordSyncService;
use App\Services\Attendance\SemesterRangeService;
use App\Services\Attendance\StudentAttendanceWriterService;
use App\Services\Attendance\TeacherAttendanceSubmissionService;
use App\Services\AttendanceTracking\AttendanceMailerService;
use App\Services\AttendanceTracking\DefaultAttendanceMailerService;
use App\Services\Invoices\InvoiceConfigService;
use App\Services\Invoices\InvoiceGradeService;
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;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->singleton(ApplicationUrlService::class);
$this->app->singleton(AttendancePolicyService::class);
$this->app->singleton(SemesterRangeService::class);
$this->app->singleton(AttendanceRecordSyncService::class);
$this->app->singleton(StudentAttendanceWriterService::class);
$this->app->singleton(TeacherAttendanceSubmissionService::class);
$this->app->singleton(AttendanceAutoPublishService::class);
$this->app->bind(AttendanceMailerService::class, DefaultAttendanceMailerService::class);
$this->app->singleton(StaffTimeOffLinkService::class);
$this->app->singleton(InvoiceConfigService::class);
$this->app->bind(InvoiceGradeService::class, function ($app) {
$config = $app->make(InvoiceConfigService::class);
return new InvoiceGradeService($config->getGradeFee());
});
$this->app->bind(InvoiceTuitionService::class, function ($app) {
$config = $app->make(InvoiceConfigService::class);
return new InvoiceTuitionService(
$app->make(InvoiceGradeService::class),
$config->getGradeFee(),
$config->getFirstStudentFee(),
$config->getSecondStudentFee(),
$config->getYouthFee(),
$config->getTimezone()
);
});
}
public function boot(): void
{
Gate::policy(NavItem::class, NavItemPolicy::class);
Gate::policy(ClassSection::class, ClassSectionPolicy::class);
Gate::policy(IpAttempt::class, IpAttemptPolicy::class);
Gate::policy(LateSlipLog::class, LateSlipLogPolicy::class);
Gate::policy(Message::class, MessagePolicy::class);
Gate::policy(Preferences::class, PreferencesPolicy::class);
Gate::policy(Staff::class, StaffPolicy::class);
Gate::policy(SupportRequest::class, SupportRequestPolicy::class);
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));
});
}
}