【问题标题】:Laravel Passport API always returns 401 unauthorized from the frontendLaravel Passport API 总是从前端返回 401 未授权
【发布时间】:2021-09-23 17:31:07
【问题描述】:

我正在尝试创建一个与 Angular 前端结合使用的 API。为此,我使用 Laravel API 和 Passport 作为身份验证方法。

如果我使用 Postman,API 可以正常工作,但是对于来自前端的请求总是返回 401: Unauthorized

路由受auth:api中间件保护。

Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();});

有一个在 Postman 中运行良好的 API 示例。

但是当我使用前端时,我得到一个响应 401。

这些是请求的标头:

这是config/auth.php

return [
'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

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

这是内核:

protected $middleware = [
    // \App\Http\Middleware\TrustHosts::class,
    \App\Http\Middleware\TrustProxies::class,
    \Fruitcake\Cors\HandleCors::class,
    \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
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,
    ],

    'api' => [
        // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::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,
];

}

我正在使用:

  • Laravel 8
  • 角 12
  • PHP 8
  • Laravel 护照

【问题讨论】:

    标签: laravel laravel-8 laravel-passport


    【解决方案1】:

    正如我在屏幕截图中看到的那样,您在请求标头中缺少字符串 Bearer

    标题应该是Authorization: Bearer eyJ0........ 而不是Authorization: eyJ0........

    【讨论】:

    • 有效!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 2022-11-26
    • 2017-11-12
    • 2014-07-03
    • 2019-08-29
    • 2018-11-03
    • 2013-02-26
    • 2018-05-19
    相关资源
    最近更新 更多