Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

gazmend's avatar

Laravel Passport oauth authorization failing

Hi,

I am getting this error "Laravel\Passport\Http\Controllers\AuthorizationController::__construct(): Argument #2 ($guard) must be of type Illuminate\Contracts\Auth\StatefulGuard, Laravel\Passport\Guards\TokenGuard given" when trying to authorize a client in my laravel application.

Laravel framework version is 11.9 Laravel passport version is 12.3

Routes are not Boot method in app service provider is as follows:

    Passport::useClientModel(Client::class);

    Model::shouldBeStrict();

    Model::preventLazyLoading(! app()->isProduction());

    Model::unguard();

My auth configuration is

 'defaults' => [
        'guard' => env('AUTH_GUARD', 'web'),
        'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
 ],

 'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => env('AUTH_MODEL', Modules\User\Models\User::class),
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

Passport configuration is

	'guard' => 'api',
   
    'private_key' => env('PASSPORT_PRIVATE_KEY'),

    'public_key' => env('PASSPORT_PUBLIC_KEY'),

    'connection' => env('PASSPORT_CONNECTION'),

    'client_uuids' => true,

    'personal_access_client' => [
        'id' => env('PASSPORT_PERSONAL_ACCESS_CLIENT_ID'),
        'secret' => env('PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET'),
    ],

ENV is

SESSION_DRIVER=file
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null

The API is consumed by a react app that is running on localhost:5173

0 likes
1 reply
gazmend's avatar

The call from react is being called like this

		const data = {
            client_id: integration?.id,
            client_secret: integration?.secret,
            scope: '',
            redirect_uri: integration?.redirect,
            state:  '1111',
        };
    
        const queryString = new URLSearchParams(data).toString();

        axios.get(`${import.meta.env.VITE_BASE_ENDPOINT}/oauth/authorize?${queryString}`, {
            headers: {
                Authorization: `Bearer ${getToken()}`,
            }
        })
            .then(response => {

            })
            .catch(err => {

            });

data is being sent correctly and so is bearer token

VITE_BASE_ENDPOINT is http://127.0.0.1:8000 without the "api"

Please or to participate in this conversation.