fix(login): 重登成功后把 CK 检测结论写回账号

登录凭据快照盖掉了 ORM 账号,on_ck_verdict 读不到 ck_check_status,新 Cookie 被丢掉。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yml2213
2026-10-05 18:20:10 +08:00
co-authored by Cursor
parent 998998c390
commit ab4c0a5422
2 changed files with 38 additions and 2 deletions
+32
View File
@@ -7,6 +7,7 @@
停止、失败、进程重启都不可能破坏账号已有的 CK。
"""
from datetime import UTC, datetime
from types import SimpleNamespace
from sqlalchemy.orm import sessionmaker
@@ -171,6 +172,37 @@ class TestLoginAttemptIsolation:
assert account.cookie_updated_at is not None
assert account.cookie_source == "web"
def test_relogin_success_writes_ck_verdict_on_the_account(self, monkeypatch):
"""重登成功后的复检必须写到账号上,不能写到登录器的临时对象上。
2026-10-05 生产:登录已经成功,但 `on_ck_verdict` 收到的是
SimpleNamespace,读 `ck_check_status` 抛异常,新 Cookie 被丢弃,
页面上全部是「重新登录异常(旧 Cookie 已保留)」。
"""
self.account.ck_check_status = "invalid"
self.session.commit()
monkeypatch.setattr(
login_service,
"check_douyu_cookie",
lambda _cookie: {
"valid": True,
"message": "ok",
"fish_ball": 1,
"nickname": "n",
"level": 1,
"checked_at": datetime.now(UTC),
},
)
self._run_batch(monkeypatch, mode="relogin")
task = self._fresh(self.task_id)
account = self._fresh_account()
assert task.attempt_status == "success"
assert "SimpleNamespace" not in (task.attempt_message or "")
assert account.cookie == "new-cookie"
assert account.ck_check_status == "valid"
def test_stopped_batch_keeps_existing_cookie(self, monkeypatch):
self._run_batch(monkeypatch, stop=True)