fix(creator): 扫码成功却一直停在二维码上 + 运营改为左右布局
【扫码不完成】根因是判据本身。原先读页面里的 window.__INITIAL_STATE__,而那是 页面加载那一刻的快照:监控那边的同一探针能用,是因为那台浏览器的页面加载时就已经 登录了;而扫码是加载之后才登录的 —— SPA 内部确实登进去了,但初始快照不会翻转, 于是检测永远等不到。 改成拿 cookie 直接问创作者后台 /api/galaxy/user/info 我是谁。实测这个判据很干净: 游客也会拿到 a1(所以签名算得出来),但接口直接回 401 无登录信息;只有真正登录了 才返回 user_id。所以「有 a1」什么都证明不了,后台认了才算。 顺带按 5 秒节流 —— 前端每 2 秒问一次,没必要每次都打后台接口。 【弹窗不关】成功后不自动关闭,停在二维码上会让人以为没成功。现在显示账号卡片与原话 提示,1.6 秒后自动关闭并提供一个「完成」按钮。 【已完成结果会残留】take_cookie 取走 cookie 就拆会话,而在飞的轮询会看到 _current 为空 回报 idle,把已显示的成功能擦掉。现在把结果记在模块里重复返回,关闭弹窗时清掉 —— 否则下次打开会立刻显示上次的成功。 【布局】按用户要求改成左右两栏(左账号列表、右数据面板),与监控统一,取消二级菜单。 未选过时默认选中第一个,右栏不会一开始就是空的。 测试:tests/test_creator_login.py 新增 7 例,含「游客会话永不完成」「接口不打满每次轮询」 「临时上下文用完必须关掉」。
This commit is contained in:
@@ -125,7 +125,9 @@ async def poll_login():
|
||||
"""轮询扫码结果;一旦成功就把账号落库并返回它。"""
|
||||
snapshot = await creator_login.status()
|
||||
|
||||
if snapshot["status"] == creator_login.STATUS_SUCCESS and snapshot.get("account") is None:
|
||||
if snapshot["status"] == creator_login.STATUS_SUCCESS:
|
||||
# take_cookie 只在会话还在时返回 cookie,取走即拆会话;重复轮询拿到 None
|
||||
# 就说明已经保存过了,直接返回上次的结果,不要退回 idle。
|
||||
cookie = await creator_login.take_cookie()
|
||||
if cookie:
|
||||
try:
|
||||
@@ -134,9 +136,11 @@ async def poll_login():
|
||||
except ValueError as exc:
|
||||
snapshot["status"] = creator_login.STATUS_ERROR
|
||||
snapshot["message"] = f"扫码成功但保存账号失败:{exc}"
|
||||
await creator_login.remember_result(snapshot)
|
||||
return snapshot
|
||||
snapshot["account"] = account
|
||||
snapshot["message"] = f"已添加账号:{account['nickname']}"
|
||||
await creator_login.remember_result(snapshot)
|
||||
|
||||
return snapshot
|
||||
|
||||
|
||||
Reference in New Issue
Block a user