在 laravel 中找到具有 JWT 令牌的用户 ID

find id of user with JWT token in laravel

在我的 API 中,用户注册后,将使用以下代码创建令牌:

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

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

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xMjcuMC4wLjE6ODAwMFwvYXBpXC9sb2dpbiIsImlhdCI6MTYyNjgxNDM2NCwiZXhwIjoxNjI2ODE3OTY0LCJuYmYiOjE2MjY4MTQzNjQsImp0aSI6Imd3eDZnVzNGTGN4MzlMekIiLCJzdWIiOjQsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ._m-7tojFaupUbAibDUbLJm6BeuFVL_etdFlwj0h5664

那么,如果不在邮递员授权中输入此令牌,我如何才能找到用户的 ID?

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

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

阅读更多关于 jwt tokens

无论您从请求 headers 中获得什么标记字符串,都可以使用它来创建一个 Token class 的 object 像这样

$token = new Token(token_string);

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

JWTAuth::setToken($token);

最后调用JWTAuthclass的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');