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;
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 25
chowjiawei

我的理解是

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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