Laravel 5.6 护照 API 身份验证在获取请求中不起作用

Posted

技术标签:

【中文标题】Laravel 5.6 护照 API 身份验证在获取请求中不起作用【英文标题】:Laravel 5.6 passport api authentication not working in get request 【发布时间】:2018-10-03 09:12:00 【问题描述】:

我正在制作单页应用程序,在处理 get 请求时,我已经通过了 X-CSRF-TOKENX-Requested-With 标头。我还将 \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class 包含在 Web 中间件组中。 我在 api.php 中的路线看起来像

Route::get('categories','Api\Categories@index')->middleware('auth:api');

但请求指定的 url 显示未经身份验证的消息。

【问题讨论】:

您是否使用身份验证参数创建了获取请求? 您是否在 config/auth.php 文件中将 API 身份验证驱动程序设置为 passport 发送授权标头'Bearer token 您认为提供的答案中是否有某些内容无法解决您的问题?如果是这样,请对答案发表评论,以澄清究竟需要解决哪些尚未解决的问题。如果它解决了您的问题,那么Accept Answers 【参考方案1】:

在请求中发送授权头

Authorization: Bearer eYz-your-passport-generated-token

【讨论】:

【参考方案2】:

不久前我遇到了完全相同的问题。这就是我为修复它所做的,更多细节在这篇文章中:https://github.com/laravel/passport/issues/47

所以这通常是为了修复 oAuth 客户端令牌:在 Passport.php 第 167 行中,到期日期设置为现在 + 100 年。

return static::$tokensExpireAt? Carbon::now()->diff(static::$tokensExpireAt): new DateInterval('P100Y');

如果您将其设置为,即 P1Y,则它正在工作。比如:

return static::$tokensExpireAt? Carbon::now()->diff(static::$tokensExpireAt): new DateInterval('P1Y');

下面几行刷新令牌也是如此:

return static::$refreshTokensExpireAt? Carbon::now()->diff(static::$refreshTokensExpireAt): new DateInterval('P1Y');

这是针对个人令牌的:以及 PassportServiceProvider.php 第 84 行,关于个人令牌:

$server->enableGrantType(new PersonalAccessGrant, new DateInterval('P1Y'));

Hope it helps ! :)

【讨论】:

以上是关于Laravel 5.6 护照 API 身份验证在获取请求中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用外部 Laravel 护照流明 api 进行 Laravel 客户端身份验证

身份验证用户提供程序 [passport] 未使用 laravel 护照定义

护照身份验证在 laravel 5.3 中不起作用

使用身份验证护照系统覆盖 laravel 中 apis url 的身份验证重定向

减少对外部 API 的身份验证调用(Laravel 5.6)

如何在 laravel 护照中实现多身份验证