Ctrl K
ComunidadGuías…

app/Providers/PassportServiceProvider.php

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
<?php

declare(strict_types=1);

namespace App\Providers;

use App\Models\AccessToken;
use App\Passport\AccessTokenRepository;
use App\Passport\AuthCode;
use App\Passport\AuthCodeRepository;
use App\Passport\AuthorizationController;
use App\Passport\AuthorizationView;
use Illuminate\Contracts\Auth\StatefulGuard;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\ServiceProvider;
use Laravel\Passport\Bridge\AccessTokenRepository as PassportAccessTokenRepository;
use Laravel\Passport\Bridge\AuthCodeRepository as PassportAuthCodeRepository;
use Laravel\Passport\Http\Controllers\AuthorizationController as PassportAuthorizationController;
use Laravel\Passport\Http\Controllers\DeviceAuthorizationController;
use Laravel\Passport\Passport;

class PassportServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->bind(PassportAuthCodeRepository::class, AuthCodeRepository::class);
        $this->app->bind(PassportAccessTokenRepository::class, AccessTokenRepository::class);
        $this->app->bind(PassportAuthorizationController::class, AuthorizationController::class);

        // Passport's contextual guard binding targets its own controller class;
        // repeat it for our override so authorize() still receives the web guard.
        $this->app->when([
            AuthorizationController::class,
            DeviceAuthorizationController::class,
        ])->needs(StatefulGuard::class)->give(
            fn () => Auth::guard(config('passport.guard', null)),
        );
    }

    public function boot(): void
    {
        Passport::useTokenModel(AccessToken::class);
        Passport::useAuthCodeModel(AuthCode::class);

        // API keys may be created with no expiry. Passport still embeds a JWT
        // `exp`, so keep that far out and enforce the optional
        // oauth_access_tokens.expires_at in LoadWorkspaceFromToken instead.
        Passport::personalAccessTokensExpireIn(now()->addYears(100));

        Passport::tokensCan([
            'mcp:use' => 'Use the MCP server',
        ]);

        Passport::authorizationView(
            fn (array $parameters) => $this->app->make(AuthorizationView::class)($parameters),
        );
    }
}