think-jwt icon indicating copy to clipboard operation
think-jwt copied to clipboard

代码提示不友好

Open cinaofdai opened this issue 4 years ago • 25 comments

代码提示不友好,建议把代码提示增加一下

cinaofdai avatar Apr 08 '21 08:04 cinaofdai

获取用户信息文档说明: image

实际的获取当前用户信息的方法是: Jwt::user()->find() 上述的方法获取不到,获取的是Service目录下面的User对象而非配置里面的user下面class模型对象 'user' => [ 'bind' => true, 'class' => 'app\common\model\Users', ]

cinaofdai avatar Apr 08 '21 10:04 cinaofdai

我在上几版就发现得用->find()才可以获取😂

Gorgeno avatar Apr 08 '21 14:04 Gorgeno

这个还是小事。代码提示不友好,影响看源码,没法双击进去查看

cinaofdai avatar Apr 08 '21 14:04 cinaofdai

抱歉,没注意到 Jwt::user() 使用不了

edenleung avatar Apr 09 '21 05:04 edenleung

抱歉,没注意到 Jwt::user() 使用不了

之前老版本获取 Jwt::userId() 我觉得有必要留一下。我为了获取uid还要去查一下数据库,之前老版本是解析了token就可以获取的,增加了没有必要的数据库的性能开销

cinaofdai avatar Apr 15 '21 03:04 cinaofdai

我们下一步计划这个问题是改:README.md,还是修复 Jwt::user()原有的功能,感觉修复原来的用法不现实。还是尽快更改README.md的说明吧。然后再加一个方法 Jwt::user()->uid()类似的功能使用代替原有的 Jwt::userId() 用法

cinaofdai avatar Apr 15 '21 04:04 cinaofdai

目前是可以使用以下方式获取的

use xiaodi\JWTAuth\Facade\Jwt;

// 获取(已验证后)整个用户模型对象
$user = Jwt::user();

echo $user->id;

edenleung avatar Apr 16 '21 01:04 edenleung

你们具体用的是哪个版本的 我排查下

edenleung avatar Apr 16 '21 01:04 edenleung

我们下一步计划这个问题是改:README.md,还是修复 Jwt::user()原有的功能,感觉修复原来的用法不现实。还是尽快更改README.md的说明吧。然后再加一个方法 Jwt::user()->uid()类似的功能使用代替原有的 Jwt::userId() 用法

还是说 你只想获取对应的id 不想查库?

edenleung avatar Apr 16 '21 01:04 edenleung

你们具体用的是哪个版本的 我排查下

2.0

Gorgeno avatar Apr 16 '21 04:04 Gorgeno

目前是可以使用以下方式获取的

use xiaodi\JWTAuth\Facade\Jwt;

// 获取(已验证后)整个用户模型对象
$user = Jwt::user();

echo $user->id;

除了->id这个用法还有什么隐藏用法吗😳

Gorgeno avatar Apr 16 '21 04:04 Gorgeno

目前是可以使用以下方式获取的

use xiaodi\JWTAuth\Facade\Jwt;

// 获取(已验证后)整个用户模型对象
$user = Jwt::user();

echo $user->id;

除了->id这个用法还有什么隐藏用法吗😳

Jwt::user() 就是返回已登录的用户对象模型,你可以获取 $user->xxx 某个字段, 调用 $user->xxxAction() User model 文件下的方法都行

edenleung avatar Apr 16 '21 07:04 edenleung

Jwt::user() 是从这两个地方实现,其实就是根据token的id 查表返回当前用户对象。

https://github.com/friendsofthinkphp/think-jwt/blob/next/src/Service/JwtAuth.php#L115

https://github.com/friendsofthinkphp/think-jwt/blob/next/src/Service/User.php#L70

edenleung avatar Apr 16 '21 07:04 edenleung

还是说 你只想获取对应的id 不想查库?

是的只想获取id不想查库。因为我想把这个id作为一个api接口的基础参数。

cinaofdai avatar Apr 19 '21 04:04 cinaofdai

你们具体用的是哪个版本的 我排查下

现在composer下来的包是v2.0.3版本的。除非是特意引用开发版,现在大部分的人都是使用这个版本。项目都是要正式运行的,不敢轻易应用开发版的

cinaofdai avatar Apr 19 '21 04:04 cinaofdai

目前是可以使用以下方式获取的

use xiaodi\JWTAuth\Facade\Jwt;

// 获取(已验证后)整个用户模型对象
$user = Jwt::user();

echo $user->id;

除了->id这个用法还有什么隐藏用法吗😳

Jwt::user() 就是返回已登录的用户对象模型,你可以获取 $user->xxx 某个字段, 调用 $user->xxxAction() User model 文件下的方法都行

好的了解,谢谢

Gorgeno avatar Apr 20 '21 01:04 Gorgeno

还是说 你只想获取对应的id 不想查库?

是的只想获取id不想查库。因为我想把这个id作为一个api接口的基础参数。

只想获取生成时传入的参数 可以这样


if (app('jwt')->verify($token)) {
    $token = app('jwt.token')->getToken();
    $uid = $token->claims()->get('jti');
    var_dump($uid);

    //  获取全部参数
    $claims = $token->claims()->all();
    var_dump($claims);
}


edenleung avatar Apr 20 '21 07:04 edenleung

还是说 你只想获取对应的id 不想查库?

是的只想获取id不想查库。因为我想把这个id作为一个api接口的基础参数。

只想获取生成时传入的参数 可以这样

if (app('jwt')->verify($token)) {
    $token = app('jwt.token')->getToken();
    $uid = $token->claims()->get('jti');
    var_dump($uid);

    //  获取全部参数
    $claims = $token->claims()->all();
    var_dump($claims);
}

微信截图_20210420175722 奇怪composer更新了还是没有到最新的有claims方法的版本, 装的稳定版composer require xiaodi/think-jwt

Gorgeno avatar Apr 20 '21 10:04 Gorgeno

看了看vendor\lcobucci\jwt\src\Token.php看到里面的了,要写成 微信截图_20210420195359这样才有结果 微信截图_20210420195428

Gorgeno avatar Apr 20 '21 11:04 Gorgeno

$username = (string) app('jwt.token')->getToken()->getClaims()['username']; 这么写是不是有点麻烦了,不知道再加多个方法直接获取而不是查库的话好不好

Gorgeno avatar Apr 20 '21 12:04 Gorgeno

意思是 实现成这样是吧?

app('jwt.token')->getClaims('username')

edenleung avatar Apr 21 '21 01:04 edenleung

意思是 实现成这样是吧?

app('jwt.token')->getClaims('username')

对,这样简便了许多😁

Gorgeno avatar Apr 21 '21 02:04 Gorgeno

有个小问题,为什么composer update显示已更新完了,但是lock文件里面还是2.0.3版本啊,remove后再require还是这样。😂

Gorgeno avatar Apr 21 '21 16:04 Gorgeno

有个小问题,为什么composer update显示已更新完了,但是lock文件里面还是2.0.3版本啊,remove后再require还是这样。😂

好吧好像是我装的稳定版,,不好意思搞错了

Gorgeno avatar Apr 21 '21 16:04 Gorgeno

这些问题都搞清楚了,什么时候把代码提示弄友好一点呀。

cinaofdai avatar May 06 '21 10:05 cinaofdai