在 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 身份验证