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