【发布时间】:2017-10-15 21:43:41
【问题描述】:
我已将 Laravel 5.2 上的项目升级到 Laravel 5.3,以便将 Laravel 护照用于 api 路由。
几周后,我仍然无法让令牌工作,我总是收到未经身份验证的错误。
经过所有调查后,我开始调试 Laravel Passport 并了解我的问题在这里(\vendor\lcobucci\jwt\src\Parser.php):
protected function splitJwt($jwt)
{
if (!is_string($jwt)) {
throw new InvalidArgumentException('The JWT string must have two dots');
}
$data = explode('.', $jwt);
if (count($data) != 3) {
throw new InvalidArgumentException('The JWT string must have two dots');
}
return $data;
}
我从
获得的令牌$this->user->createToken($this->user->id.' Access Token')->accessToken;
只是没有点,所以不能爆炸。我不知道为什么,但认为这是主要问题。
我得到的典型令牌如下所示:1369781b342d5181072c7f2859a54102f1dc992f6367c4b8ac37193799ec893438ad1b6ac43af3ae
有人可以帮我解决这个问题吗?
提前致谢
【问题讨论】:
-
在 laravel 5.3 的 API 身份验证中,它默认使用 OAUTH .. 它不使用 JWT。对于 JWT,您必须更新 auth guard。你有没有用 guard 配置一些东西?
-
是的,我使用了这条指令laravel.com/docs/5.3/passport。我的 config/auth.php 有这个
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ '司机' => '护照', '供应商' => '用户', ], ],` -
所以您没有使用 JWT 作为您的身份验证保护。您需要配置 JWT 支持的 auth guard 以使您的 api 由 JWT 进行身份验证。您可以使用以下包来满足您的需求https://github.com/irazasyed/jwt-auth-guard
-
抱歉,整个任务就是使用 Laravel Passport。 Jwt 出现在这里是因为 laravel/passport 的 composer.json 使用它 prntscr.com/f8uryg 。而且我无法修改供应商文件
-
看看这个线程..它会澄清。 https://github.com/laravel/passport/issues/222
标签: php oauth laravel-5.3 laravel-passport