Getting message "unauthenticated" for every request in laravel passport

Viewed 1270

I am using laravel version 6 and laravel/passport version 8. I am getting { "message": "Unauthenticated." for every request. } I have various guards. My config/auth.php

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

        'vendors_web' => [
            'driver' => 'session',
            'provider' => 'vendors',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],

        'vendors' => [
            'driver' => 'passport',
            'provider' => 'vendors',
        ],
    
        'admin' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],

    ],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'vendors' => [
        'driver' => 'eloquent',
        'model' => App\Vendor::class,
    ],
],

For every outgoing request from the laravel, I have used passport's predefined middleware \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, which attaches a cookie to the outgoing response which contains the accessToken. So for every incoming request, i have wtitten a middleware auth.api which gets the cookie data(token) and attaches it to the request header. auth.api middleware

 <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    
    class AddAuthHeader
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        { 
            if (!$request->bearerToken()) {
                if ($request->hasCookie('_token')) {
                    $token = $request->cookie('_token');
                    $request->headers->add(['Authorization' => 'Bearer ' . $token]);
                }
            }
            return $next($request);
        }
    }

Kernel.php

protected $middleware = [
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\ForceJsonResponse::class,
    \App\Http\Middleware\Cors::class,
    
];

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        // \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
    'auth.api' => [
        \App\Http\Middleware\AddAuthHeader::class,
        'throttle:60,1',
        'bindings',
        'auth:api',
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,

    ],
];


protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'userAuth' => \App\Http\Middleware\userAuth::class,
    'adminAuth' => \App\Http\Middleware\adminAuth::class,
    'scopes' => \Laravel\Passport\Http\Middleware\CheckScopes::class,
    'scope' => \Laravel\Passport\Http\Middleware\CheckForAnyScope::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'json.response' => \App\Http\Middleware\ForceJsonResponse::class,
    'cors' => \App\Http\Middleware\Cors::class,
];


protected $middlewarePriority = [
    \App\Http\Middleware\AddAuthHeader::class,
    \App\Http\Middleware\Authenticate::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    // \App\Http\Middleware\Authenticate::class,
    \Illuminate\Routing\Middleware\ThrottleRequests::class,
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \Illuminate\Auth\Middleware\Authorize::class,
    
];

api.php

Route::group([
    'middleware' => ['auth.api', 'auth:vendors', 'cors', 'json.response']
], function(){
    Route::get('/vendor-dashboard', "VendorController@dashboard");
    
    //get authenticated user
    Route::get('/user', 'Auth\AuthAPIController@user');

    //products
    Route::get('/vendor-get-products/{type}', 'VendorController@vendorProductListing');
    Route::get('/vendor-create-product-view/{id}/{type}', 'VendorController@createVendorProductView');
    Route::post('/vendor-create-product/{id}/{type}', 'VendorController@createVendorProduct');

    //orders
    Route::get('/vendor-orders/{status}/{type}', 'VendorController@getOrders');
    Route::post('/vendor-orders/update/{status}/{type}', 'VendorController@orderStatusUpdate');
});

Outputs i get are, After logging in, i get the cookie in my browser. Cookie

If i dd the header in the middleware, it shows the authorization header with the bearer token, but i still get anauthenticated user error. Error

0 Answers
Related