2121@router .get ('' , summary = '获取令牌列表' , dependencies = [DependsJwtAuth ])
2222async def get_tokens (username : Annotated [str | None , Query ()] = None ) -> ResponseSchemaModel [list [GetTokenDetail ]]:
2323 token_keys = await redis_client .keys (f'{ settings .TOKEN_REDIS_PREFIX } :*' )
24- token_online = await redis_client .smembers (settings .TOKEN_ONLINE_REDIS_PREFIX )
25- data = []
24+ online_clients = await redis_client .smembers (settings .TOKEN_ONLINE_REDIS_PREFIX )
25+ data : list [GetTokenDetail ] = []
26+
27+ def append_token_detail () -> None :
28+ data .append (
29+ token_detail .model_copy (
30+ update = {
31+ 'username' : extra_info .get ('username' , '未知' ),
32+ 'nickname' : extra_info .get ('nickname' , '未知' ),
33+ 'ip' : extra_info .get ('ip' , '未知' ),
34+ 'os' : extra_info .get ('os' , '未知' ),
35+ 'browser' : extra_info .get ('browser' , '未知' ),
36+ 'device' : extra_info .get ('device' , '未知' ),
37+ 'last_login_time' : extra_info .get ('last_login_time' , '未知' ),
38+ }
39+ )
40+ )
41+
2642 for key in token_keys :
2743 token = await redis_client .get (key )
2844 token_payload = jwt_decode (token )
@@ -36,31 +52,15 @@ async def get_tokens(username: Annotated[str | None, Query()] = None) -> Respons
3652 os = '未知' ,
3753 browser = '未知' ,
3854 device = '未知' ,
39- status = StatusType .disable if session_uuid not in token_online else StatusType .enable ,
55+ status = StatusType .enable if session_uuid in online_clients else StatusType .disable ,
4056 last_login_time = '未知' ,
4157 expire_time = token_payload .expire_time ,
4258 )
4359 extra_info = await redis_client .get (f'{ settings .TOKEN_EXTRA_INFO_REDIS_PREFIX } :{ session_uuid } ' )
4460 if extra_info :
45-
46- def append_token_detail ():
47- data .append (
48- token_detail .model_copy (
49- update = {
50- 'username' : extra_info .get ('username' ),
51- 'nickname' : extra_info .get ('nickname' ),
52- 'ip' : extra_info .get ('ip' ),
53- 'os' : extra_info .get ('os' ),
54- 'browser' : extra_info .get ('browser' ),
55- 'device' : extra_info .get ('device' ),
56- 'last_login_time' : extra_info .get ('last_login_time' ),
57- }
58- )
59- )
60-
6161 extra_info = json .loads (extra_info )
6262 if extra_info .get ('login_type' ) != 'swagger' :
63- if username :
63+ if username is not None :
6464 if username == extra_info .get ('username' ):
6565 append_token_detail ()
6666 else :
@@ -79,8 +79,8 @@ def append_token_detail():
7979 ],
8080)
8181async def kick_out (
82- request : Request , pk : Annotated [int , Path (..., description = '用户 ID' )], session_uuid : KickOutToken
82+ request : Request , pk : Annotated [int , Path (..., description = '用户 ID' )], obj : KickOutToken
8383) -> ResponseModel :
8484 superuser_verify (request )
85- await revoke_token (pk )
85+ await revoke_token (str ( pk ), obj . session_uuid )
8686 return response_base .success ()
0 commit comments