feat(monitor): 扫码同时存一份 Cookie,并把登录判定换成权威判据
用户问「现在是不是扫码就能自动获取 cookie」—— 不是,而且这正是那个面板显得没用的根源: 它只干了半件事,扫码**只写浏览器 profile,完全不提取 cookie**(qrlogin.py 里连一行 取 cookie 的代码都没有)。于是: - CDP 开着时任务能用(复用 profile),但 Cookie 面板始终显示「未配置」 - CDP 一关,任务立刻断,因为库里那份 cookie 从来没被填过 现在扫码把两件事一起做了:写 profile(CDP 用)+ 存一份到库(Cookie 注入用)。 两种机制同时填上,开关怎么切都不断。cookie 只在内存里从 qrlogin 传到路由,不进响应体。 同时修掉一个同类 bug:监控侧的登录判定还在用页面里的 window.__INITIAL_STATE__, 而那是**页面加载那一刻的快照** —— 浏览器本来就登录着时它是对的,但扫码是加载之后 才登录的,快照不会翻转,表现为「扫了码却一直停在二维码上」。运营模块踩过同一个坑, 当时只修了那一处。现在两边统一为:拿 cookie 问后台接口「我是谁」。顺带不再需要页面导航, 检测变轻了。 前端:已登录时按钮原先被我藏起来了,面板于是变成一块只能看、不能操作的区域 —— 用户的原话是「没用」。现在两种状态都给按钮,含义不同:未登录=取二维码, 已登录=把当前登录态同步成 Cookie。 测试:tests/test_qrlogin.py 重写(stub 从页面探针换成后台接口),新增「成功会话必须 交出 cookie」「只能取一次」两例。
This commit is contained in:
+17
-2
@@ -300,8 +300,23 @@ async def start_qr_login(platform: str = Query(default=PLATFORM_XHS)):
|
||||
|
||||
@router.get("/login/qr")
|
||||
async def get_qr_login():
|
||||
"""Poll the live session: waiting -> success / expired / error."""
|
||||
return await qrlogin.status()
|
||||
"""Poll the live session: waiting -> success / expired / error.
|
||||
|
||||
扫码成功时**把 cookie 一并存进库**。扫码本来只写浏览器 profile,那只够 CDP 模式用;
|
||||
存一份之后,CDP 关掉、任务改用 --cookies_file 注入也照样能跑 —— 两种机制同时填上,
|
||||
开关怎么切都不会断。
|
||||
"""
|
||||
snapshot = await qrlogin.status()
|
||||
|
||||
if snapshot["status"] == qrlogin.STATUS_SUCCESS:
|
||||
cookie = await qrlogin.take_cookie()
|
||||
if cookie:
|
||||
async with get_session() as session:
|
||||
await set_cookie(session, cookie)
|
||||
snapshot["cookie_saved"] = True
|
||||
snapshot["message"] = f"{snapshot['message']};登录态已同时存入 Cookie"
|
||||
|
||||
return snapshot
|
||||
|
||||
|
||||
@router.delete("/login/qr")
|
||||
|
||||
Reference in New Issue
Block a user