1313
1414use Hyperf \HttpServer \Contract \RequestInterface ;
1515use Hyperf \Redis \Redis ;
16+ use Hyperf \Utils \Context ;
1617use Psr \EventDispatcher \EventDispatcherInterface ;
1718use Qbhy \HyperfAuth \Authenticatable ;
1819use Qbhy \HyperfAuth \Events \ForcedOfflineEvent ;
@@ -33,6 +34,7 @@ class SsoGuard extends JwtGuard
3334 public function __construct (array $ config , string $ name , UserProvider $ userProvider , RequestInterface $ request )
3435 {
3536 parent ::__construct ($ config , $ name , $ userProvider , $ request );
37+ $ this ->eventDispatcher = make (EventDispatcherInterface::class);
3638
3739 // 初始化redis实例
3840 $ this ->redis = is_callable ($ config ['redis ' ]) ? call_user_func_array ($ config ['redis ' ], []) : make (Redis::class);
@@ -51,7 +53,8 @@ public function login(Authenticatable $user, string $client = null)
5153
5254 if (! empty ($ previousToken = $ this ->redis ->hGet ($ redisKey , $ client ))) {
5355 // 如果存在上一个 token,就给他拉黑,也就是强制下线
54- $ this ->getJwtManager ()->addBlacklist ($ token );
56+ Context::set ($ this ->resultKey ($ previousToken ), 0 );
57+ $ this ->getJwtManager ()->addBlacklist ($ previousToken );
5558 $ this ->redis ->hDel ($ redisKey , $ client );
5659 $ this ->eventDispatcher ->dispatch (new ForcedOfflineEvent ($ user , $ client ));
5760 }
0 commit comments