diff --git a/video-gen-api/app/tasks/token_refresh_task.py b/video-gen-api/app/tasks/token_refresh_task.py index 6f6a4279..5b555b1c 100644 --- a/video-gen-api/app/tasks/token_refresh_task.py +++ b/video-gen-api/app/tasks/token_refresh_task.py @@ -73,8 +73,8 @@ async def refresh_juliang_token(oauth: UserOAuth, app: UserOAuthApp, db: AsyncSe if data.get("code") != 0: logger.error(f"刷新巨量引擎token失败: oauth_id={oauth.id}, 错误信息: {data}") - # refresh_token已失效 - if data.get("code") in [40103, 40107]: + # refresh_token已失效或刷新失败,统一清理token + if data.get("code") in [40103, 40107, 40000]: where_cond = UserOAuth.deleted_at.is_(None) if oauth.appid: where_cond = where_cond & (UserOAuth.appid == oauth.appid) @@ -95,7 +95,6 @@ async def refresh_juliang_token(oauth: UserOAuth, app: UserOAuthApp, db: AsyncSe related_oauth_ids = await db.execute(select(UserOAuth.id).where(where_cond)) related_oauth_ids = [row[0] for row in related_oauth_ids.all()] - # 【改动2:失效直接删除Redis缓存,不再写入空值】 for related_id in related_oauth_ids: await _delete_redis_token(related_id) return diff --git a/video-gen-api/app/utils/douyinRequest.py b/video-gen-api/app/utils/douyinRequest.py index 551d912b..d4c2df2d 100644 --- a/video-gen-api/app/utils/douyinRequest.py +++ b/video-gen-api/app/utils/douyinRequest.py @@ -136,7 +136,13 @@ class DouyinRequest: now_beijing = datetime.now(tz=BEIJING_TZ) if force_refresh: - # 强制刷新:清空同条件下所有账号缓存与数据库token + # 强制刷新:先检查refresh_token是否为空 + if not oauth_data.refresh_token: + # RefreshToken为空 → 授权已失效,清理Redis脏缓存 + await self._delete_redis_token(oauth_id) + raise ValueError("授权已过期,请重新授权登录") + + # 清空同条件下所有账号缓存与数据库token where_cond = UserOAuth.deleted_at.is_(None) if oauth_data.appid: where_cond = where_cond & (UserOAuth.appid == oauth_data.appid) @@ -191,6 +197,11 @@ class DouyinRequest: return token # =========【核心业务规则实现:判断RefreshToken是否过期】========= + if not oauth_data.refresh_token: + # RefreshToken为空 → 授权已失效,清理Redis脏缓存 + await self._delete_redis_token(oauth_id) + raise ValueError("授权已过期,请重新授权登录") + if oauth_data.refresh_token_expired and oauth_data.refresh_token_expired < now_beijing: # RefreshToken过期 → 授权彻底失效,清理Redis脏缓存 await self._delete_redis_token(oauth_id) @@ -242,6 +253,7 @@ class DouyinRequest: code = data.get('code', 0) if code != 0: + #刷新token raise ValueError(f"刷新access_token失败,接口返回:{data}") data = data.get('data', {})