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;
我的理解是
如果有好几个端都用一套 然后都再登录状态 我想某个平台退出 其他平台还是登录状态 这样子就注销一个token 其他平台就可以不受影响了
如楼上,但是是否注册新的由你来决定,一旦创建新的,创建时间,有效期,作用域都会重新计算
每个业务的需求不一样,你自己多调用一下就好,如果 passport 写死反而不好
jwt的逻辑就是不去判断服务器的token存储信息。判断的话就失去了使用jwt的意义了
理论上是可以用刷新token领取多个accesstoken的
这个功能不是你理解的这么用的,你创建新的token,参数其实是你的设备名称,同一个设备第二次登录,你要写逻辑挤掉上一个,而不是把所有的都删除,当当前的token过期了,就跳转登录即可。
创建时会指定一个作用域,应该是用来区分不同业务下的登录状态.如果新建一个就把其他的都删除了是不是有点,至于为什么不把同作用域的删除应该是为了满足同一作用域下多个登录的场景吧,总的来说是为了满足大部分场景,不能说你需要就把这个同步清除的功能封装在里面吧,那样不需要的人使用起来不就麻烦了
感谢大家的回复,收获颇多。
如果是多端登录,这么设计是合理的。具体的逻辑暴露给我们自己处理,但是现在有个疑问,我现在能确定具体一个tokenid,但是如何能获取到这个token呢?
如果能获取到具体的token值,那么就可以直接个性化定制了,直接复用token或者刷新token的过期时间等等。
所以,能获取到具体的token值的方法吗?我也在看看源码。
token的管理是交给你自己了,文档有说明须要你自己去管理这二个事件,想怎么管理就怎么管理
1.如果使用旧的 Token 那么可能会给用户的感觉是,没过多久就失效了,又得重新登录,但是如果重新颁发Token 删除旧的有效 Token ,会导致原先登录的设备要重新登录。
2.一般的业务中,一个用户可以有多个回话,例如 APP、各种第三方小程序等,不应该由平台来剔除,而是交给用户自己选择是否要剔除这些已授权的设备。