Laravel passport 如何获取已发放的 access_token 值?

在使用 Laravel passport 做授权验证时,发放 token 的逻辑有个疑问。

目前我测试的结果是每次创建token 都会返回一个新的,同时旧的也不会删除或更新过期时间。

1、为什么在发放 token 的时候,不先验证当前用户是否有未过期的 token ,如果有就直接返回,否则在创建一个新的 token 呢?
2、如果一直返回新的也没问题,对旧的token也没有做过期或者删除处理,这个会有可能同一个用户有多个token都可以使用的情况。

这么做是有什么特殊的想法吗?大家都是怎么理解的。

我现在得临时解决方案就是在生成新 token 之前,将该用户所有的 token 都删除了,保证只有一个可用。

// 删除原 token 无论是否过期
$user->tokens()->delete();
// 生成新 token
$user->createToken('mini-app')->accessToken;
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 25
chowjiawei

我的理解是

如果有好几个端都用一套 然后都再登录状态 我想某个平台退出 其他平台还是登录状态 这样子就注销一个token 其他平台就可以不受影响了

2年前 评论
24K大白羊 (楼主) 2年前

如楼上,但是是否注册新的由你来决定,一旦创建新的,创建时间,有效期,作用域都会重新计算

2年前 评论
24K大白羊 (楼主) 2年前
nff93

每个业务的需求不一样,你自己多调用一下就好,如果 passport 写死反而不好

2年前 评论
24K大白羊 (楼主) 2年前

jwt的逻辑就是不去判断服务器的token存储信息。判断的话就失去了使用jwt的意义了
理论上是可以用刷新token领取多个accesstoken的

2年前 评论
24K大白羊 (楼主) 2年前

这个功能不是你理解的这么用的,你创建新的token,参数其实是你的设备名称,同一个设备第二次登录,你要写逻辑挤掉上一个,而不是把所有的都删除,当当前的token过期了,就跳转登录即可。

2年前 评论
24K大白羊 (楼主) 2年前

创建时会指定一个作用域,应该是用来区分不同业务下的登录状态.如果新建一个就把其他的都删除了是不是有点,至于为什么不把同作用域的删除应该是为了满足同一作用域下多个登录的场景吧,总的来说是为了满足大部分场景,不能说你需要就把这个同步清除的功能封装在里面吧,那样不需要的人使用起来不就麻烦了

2年前 评论
24K大白羊 (楼主) 2年前

感谢大家的回复,收获颇多。

如果是多端登录,这么设计是合理的。具体的逻辑暴露给我们自己处理,但是现在有个疑问,我现在能确定具体一个tokenid,但是如何能获取到这个token呢?

如果能获取到具体的token值,那么就可以直接个性化定制了,直接复用token或者刷新token的过期时间等等。

所以,能获取到具体的token值的方法吗?我也在看看源码。

2年前 评论
xini2603 2年前
24K大白羊 (作者) (楼主) 2年前
xini2603 2年前
wozaihanni 1年前

token的管理是交给你自己了,文档有说明须要你自己去管理这二个事件,想怎么管理就怎么管理

//auth2认证获取授权码事件
            'Laravel\Passport\Events\AccessTokenCreated' => [
                'App\Listeners\RevokeOldTokens',
            ],
            //auth2刷新授权码事件
            'Laravel\Passport\Events\RefreshTokenCreated' => [
                'App\Listeners\PruneOldTokens',
            ],
2年前 评论

1.如果使用旧的 Token 那么可能会给用户的感觉是,没过多久就失效了,又得重新登录,但是如果重新颁发Token 删除旧的有效 Token ,会导致原先登录的设备要重新登录。

2.一般的业务中,一个用户可以有多个回话,例如 APP、各种第三方小程序等,不应该由平台来剔除,而是交给用户自己选择是否要剔除这些已授权的设备。

2年前 评论
24K大白羊 (楼主) 2年前
24K大白羊 (楼主) 2年前
GeorgeKing (作者) 2年前
24K大白羊 (楼主) 2年前
GeorgeKing (作者) 2年前
24K大白羊 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!