This commit is contained in:
2026-06-17 15:19:11 +08:00
parent ea90128b20
commit 87377ac791
4 changed files with 14 additions and 9 deletions
+4 -2
View File
@@ -19,15 +19,17 @@ RedisDep = Annotated[Redis, Depends(get_redis)]
def alterToken(redis: RedisDep, alter_token: str | None = Header(None)):
if alter_token is not None:
try:
decoded_bytes = base64.b64decode(alter_token)
decoded_bytes = base64.urlsafe_b64decode(alter_token)
decoded_str = decoded_bytes.decode('utf-8')
alter = json.loads(decoded_str)
# 6小时过期
if (int(time.time() * 1000) - alter['time']) / (60 * 60 * 1000) > 6:
raise ResponseException('登录过期或无效Token,请刷新后重试')
alterData = get_redis_info(redis, f'dcalc:adventure:{alter["alter"]}', lambda: get_adv_info(alter['alter']))
if alterData is None:
raise ResponseException('登录过期或无效Token,请刷新后重试')
return AlterState(alterData['class'], alter_token, {}, alter.get('equVersion', '0'), alter['time'])
except (base64.binascii.Error, json.JSONDecodeError):
except (base64.binascii.Error, json.JSONDecodeError, KeyError, TypeError, UnicodeDecodeError):
raise ResponseException('登录过期或无效Token,请刷新后重试')
else:
raise ResponseException('登录过期或无效Token,请刷新后重试')
+3 -1
View File
@@ -6,7 +6,7 @@ from api.core.Response import response
from api.core.Redis import get_redis_info, get_redis_info_async
from api.dp import RedisDep, AltersDep
from core.basic.equipment import get_equipment
from core.character.adventure import get_adv_list
from core.character.adventure import get_adv_info, get_adv_list
from core.basic.character import createCharacter
from core.open.helper import get_user_info_by_id, get_user_info_by_role_id, get_user_list_by_id, getRoleJobCode
from core.open.skillTree import get_skill_tree_info
@@ -30,6 +30,8 @@ async def get_adventure_info(request: Request, redis: RedisDep, name: str = None
@router.get('/token/get/{alter}')
async def getToken(redis: RedisDep, alter: str, request: Request, version: str = None, equVersion: str = '0'):
if get_adv_info(alter) is None:
raise ResponseException('无效的职业')
token = createToken(alter, equVersion, redis)
return response(data=token)