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:
@@ -217,19 +217,20 @@ export function QrLoginPanel() {
|
||||
<div className="space-y-2">
|
||||
<p className="text-[11px] font-mono text-cyber-text-muted leading-relaxed">
|
||||
{loggedIn
|
||||
? '这台浏览器已是登录状态,定时监控会直接复用它的 profile,无需再扫码。'
|
||||
? '这台浏览器已是登录状态。CDP 模式下定时任务直接复用它;点下面的按钮可以把这份登录态也存成 Cookie —— 那样即使关掉 CDP、任务改用 Cookie 注入也照样能跑。'
|
||||
: '经 CDP 接管服务器上已开启远程调试的 Chrome,把二维码取回来显示在这里。需要先在「系统设置」里打开 接管已有 Chrome(CDP),并确保那台 Chrome 正以 9222 端口运行。'}
|
||||
</p>
|
||||
{!loggedIn && (
|
||||
<Button size="sm" disabled={busy} onClick={begin}>
|
||||
{start.isPending ? (
|
||||
<Loader2 className="w-3 h-3 mr-1 animate-spin" />
|
||||
) : (
|
||||
<QrCode className="w-3 h-3 mr-1" />
|
||||
)}
|
||||
获取二维码
|
||||
</Button>
|
||||
)}
|
||||
{/* 已登录时**也要给按钮**。原先这里把按钮藏了,于是面板变成一块只能看、
|
||||
不能操作的区域 —— 用户的原话是「没用」。两种状态下点击是同一个动作,
|
||||
只是含义不同:没登录就是取二维码,已登录就是把当前登录态同步成 Cookie。 */}
|
||||
<Button size="sm" disabled={busy} onClick={begin}>
|
||||
{start.isPending ? (
|
||||
<Loader2 className="w-3 h-3 mr-1 animate-spin" />
|
||||
) : (
|
||||
<QrCode className="w-3 h-3 mr-1" />
|
||||
)}
|
||||
{loggedIn ? '同步登录态为 Cookie' : '获取二维码'}
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -217,6 +217,8 @@ export interface QrLoginState {
|
||||
/** Whether the browser reports being signed in right now. */
|
||||
logged_in: boolean
|
||||
nickname: string | null
|
||||
/** 登录态是否已同时存进库(供非 CDP 模式的定时任务使用)。 */
|
||||
cookie_saved?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user