在 laravel 中查找具有 JWT 令牌的用户 id

Posted

技术标签:

【中文标题】在 laravel 中查找具有 JWT 令牌的用户 id【英文标题】:find id of user with JWT token in laravel 【发布时间】:2021-09-28 19:28:07 【问题描述】:

在用户注册后,在我的 API 中,使用此代码创建了一个令牌:

$token = JWTAuth::fromUser($user);

当我使用 dd($token) 时,返回这个:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xMjcuMC4wLjE6ODAwMFwvYXBpXC9sb2dpbiIsImlhdCI6MTYyNjgxNDM2NCwiZXhwIjoxNjI2ODE3OTY0LCJuYmYiOjE2MjY4MTQzNjQsImp0aSI6Imd3eDZnVzNGTGN4MzlMekIiLCJzdWIiOjQsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ._m-7tojFaupUbAibDUbLJm6BeuFVL_etdFlwj0h5664

那么我如何在不输入这个令牌的邮递员授权的情况下找到用户的ID?

【问题讨论】:

【参考方案1】:

简单,使用https://jwt.io

在“sub”(主题)中,您将看到用户 ID。

阅读更多关于jwt tokens

【讨论】:

【参考方案2】:

无论您从请求标头中获得什么令牌字符串,都可以使用它来创建像这样的Token 类的对象

$token = new Token(token_string);

之后,像这样在JWTAuth 类中使用$token

JWTAuth::setToken($token);

最后调用JWTAuth类的getPayload方法获取实际数据。

JWTAuth::getPayload($token)->get('sub')

完整代码

use JWTAuth;
use Tymon\JWTAuth\Token;
...
...

// generate token
$user = \App\User::find(1);
$tokenString = JWTAuth::fromUser($user);

// decode token to get actual data
$token = new Token($tokenString); // here you use header insted of $tokenString
JWTAuth::setToken($token);
$subject = JWTAuth::getPayload($token)->get('sub');

【讨论】:

但是,他已经有了一个带有 user_id 的用户模型 :)

以上是关于在 laravel 中查找具有 JWT 令牌的用户 id的主要内容,如果未能解决你的问题,请参考以下文章

具有相同令牌的多个 Laravel-API 的 JWT 身份验证

如何从 jwt 令牌获取确切的用户以及用户在 laravel 中的确切帖子

如何在 jwt laravel 5.3 中处理令牌到期?

JWT/Laravel 延长令牌有效期

Laravel,如何从自定义表的 jwt 令牌获取登录用户

Laravel 通过生成的令牌进行身份验证,无需护照和 jwt