fix: 扫码登录状态可独立查询 + 趋势图改回自适应纵轴
【登录反馈】实测这台浏览器 loggedIn=true,其实早就登录成功了;看不到反馈是判据和设计的问题: 1. 判据不可靠。原先靠 web_session 的值变化判断——对照组显示:一个全新的空 profile 首次访问小红书就会被发一个 web_session,所以「有这个 cookie」什么都证明不了。可信信号是页面自己的 __INITIAL_STATE__.user.loggedIn,但它是 Vue 响应式引用,必须 .value 解包(这就是前面探针读到 [object Object] 和 None 的原因)。 2. 状态绑死在临时会话上。扫码会话是内存状态,进程一重启就没(部署、崩溃都算),面板于是悄悄退回初始态——一次成功扫码看起来像什么都没发生。 改法不是让会话活得久,而是把「登没登录」变成随时可查、与会话无关: - 新增 GET /api/monitor/login/state,直接问浏览器要答案,带 5 秒缓存;force=true 先重载页面再读,用于状态陈旧 - qrlogin 改为常驻 Playwright 客户端 + 复用同一个标签页,并在重启后认领浏览器里已存在的 xhs 标签页,避免堆孤儿页 - 把「读不到状态」与「未登录」分开——前者显示具体错误,不再悄悄显示成未登录 - 面板顶部常驻显示登录态与昵称,带「重新检测」按钮;扫码成功后自动翻转 【趋势图】上一轮改过头了。dataviz 规范里没有「折线图必须从 0 起」这条——基线相关的条文全是讲柱状图的(柱状图用长度编码数值,不从 0 起比例就是错的;折线图用位置编码,轴只需如实框住数据)。改回自适应,保留上一轮修好的左侧刻度栏让范围始终可见;步长收敛到 1/2/5×10ⁿ,全平序列撑开一档避免除零。
This commit is contained in:
@@ -280,6 +280,20 @@ async def cancel_qr_login():
|
||||
return await qrlogin.cancel()
|
||||
|
||||
|
||||
@router.get("/login/state")
|
||||
async def get_login_state(force: bool = Query(default=False)):
|
||||
"""Ask the browser itself whether it is signed in.
|
||||
|
||||
Deliberately separate from the QR session above. That session is in-memory and
|
||||
dies with the process -- a redeploy is enough -- so "am I logged in?" must not
|
||||
hinge on it, or a successful scan looks like nothing happened.
|
||||
|
||||
``force`` reloads the page first, for when the login may have lapsed somewhere
|
||||
else and the page's copy of the state is stale.
|
||||
"""
|
||||
return await qrlogin.check_login_state(force=force)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Report
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user