MCPcopy Create free account
hub / github.com/TheSmallHanCat/flow2api / _try_refresh_st

Method _try_refresh_st

src/services/token_manager.py:734–797  ·  view source on GitHub ↗

尝试通过浏览器刷新 Session Token 使用常驻 tab 获取新的 __Secure-next-auth.session-token Args: token_id: Token ID token: Token 对象 Returns: 新的 ST 字符串,如果失败返回 None

(self, token_id: int, token)

Source from the content-addressed store, hash-verified

732 return None
733
734 async def _try_refresh_st(self, token_id: int, token) -> Optional[str]:
735 """尝试通过浏览器刷新 Session Token
736
737 使用常驻 tab 获取新的 __Secure-next-auth.session-token
738
739 Args:
740 token_id: Token ID
741 token: Token 对象
742
743 Returns:
744 新的 ST 字符串,如果失败返回 None
745 """
746 try:
747 from ..core.config import config
748
749 protocol_st = await self._try_protocol_refresh_st(token_id, token)
750 if protocol_st:
751 return protocol_st
752
753 # 仅在 personal 模式下支持 ST 自动刷新
754 if config.captcha_method != "personal":
755 debug_logger.log_info(f"[ST_REFRESH] 非 personal 模式,跳过 ST 自动刷新")
756 return None
757
758 if not token.current_project_id:
759 debug_logger.log_warning(f"[ST_REFRESH] Token {token_id} 没有 project_id,无法刷新 ST")
760 return None
761
762 debug_logger.log_info(f"[ST_REFRESH] Token {token_id}: 尝试通过浏览器刷新 ST...")
763
764 from .browser_captcha_personal import BrowserCaptchaService
765 service = await BrowserCaptchaService.get_instance(self.db)
766
767 refresh_timeout_seconds = 45.0
768 try:
769 new_st = await asyncio.wait_for(
770 service.refresh_session_token(token.current_project_id),
771 timeout=refresh_timeout_seconds,
772 )
773 except asyncio.TimeoutError:
774 debug_logger.log_error(
775 f"[ST_REFRESH] Token {token_id}: 刷新 ST 超时 ({refresh_timeout_seconds:.0f}s)"
776 )
777 record_token_refresh("st", "failure")
778 return None
779 if new_st and new_st != token.st:
780 # 更新数据库中的 ST
781 await self.db.update_token(token_id, st=new_st)
782 debug_logger.log_info(f"[ST_REFRESH] Token {token_id}: ST 已自动更新")
783 record_token_refresh("st", "success")
784 return new_st
785 elif new_st == token.st:
786 debug_logger.log_warning(f"[ST_REFRESH] Token {token_id}: 获取到的 ST 与原 ST 相同,可能登录已失效")
787 record_token_refresh("st", "failure")
788 return None
789 else:
790 debug_logger.log_warning(f"[ST_REFRESH] Token {token_id}: 无法获取新 ST")
791 record_token_refresh("st", "failure")

Callers 1

_refresh_at_innerMethod · 0.95

Calls 8

record_token_refreshFunction · 0.85
log_infoMethod · 0.80
log_warningMethod · 0.80
log_errorMethod · 0.80
get_instanceMethod · 0.45
refresh_session_tokenMethod · 0.45
update_tokenMethod · 0.45

Tested by

no test coverage detected