Files
cpdaily_xiaozhushou/backed
becomer 05d9ef26b1
ci/woodpecker/tag/build Pipeline was successful
续期后加真实可用性校验,避免「假成功」导致无限重试
162 日志(8884 容器,v1.2.157)实证:
  16:25:58 INFO  刷新cookie: 已用长期凭证续期成功 userId=1279
  16:25:58 ERROR 获取表单失败 taskId=337 error="...cpdaily_cookie_expired"

续期报告成功,紧接着业务调用仍过期。

根因:refreshCookieByLongTermToken 判定成功的唯一标准是
「结果里存在 MOD_ 前缀的 cookie」。但续期走的
/imUserToken/getImUserToken 接口只校验 sessionToken 头,
**不校验 CAS 会话是否有效**;当 CASTGC/sessionToken 本身已过期时,
它仍可能返回 errCode=0,并把 jar 里那批无效 cookie 全数带回。
于是本次续期「成功」,调用方立刻重试又过期,用户只看到内部错误码。

改动:
- 新增 cpd.VerifyCookieUsable:用业务同款最小请求(拉当天任务列表)
  做只读探测。三种任务类型任一能正常返回即视为有效;返回
  ErrCookieExpired 才判定凭证不可用;网络等其它错误不归咎于凭证。
  该探测无任何写副作用。
- refreshCookieByLongTermToken 在回写 cookie 前先跑校验,
  不通过则按续期失败返回,让上层走「请重新登录」引导,
  而不是发出一轮注定失败的重试。

配合上一提交(07cf121)的两处升级与 userFacingError 兜底,
现在链路上任一环节的登录态失效都会转成明确的重登引导,
不再把 cpdaily_cookie_expired 暴露给用户。
2026-10-18 16:38:55 +08:00
..
v1.2.50:辽宁工程技术大学(lntu)登录适配——强制走 CAS + 滑块验证码——① 根因:平台接口返回 joinType=CLOUD(IsIap=true),但网关 /iap/doLogin 不存在(HTTP 405),IAP 账密提交必然失败并返回 FAIL_UPNOTMATCH("用户名或密码不匹配",误导用户以为密码错误);真实链路为 fdm.lntu.edu.cn/iap 302 → 学校 CAS(authserver.lntu.edu.cn/authserver/login)→ 账密 + 验证码 → 回调 /iap/loginSuccess?sessionToken=...&ticket=... 建立网关会话(cookie 落在 fdm.lntu.edu.cn,与 wec-* 任务接口同域);② 修复:新增 login_lntu.go 的 lntuCasLogin(同 xcu 模式,用 /iap 网关入口覆盖 ampUrl 后走通用 CAS 流程),CpdailyLogin 中对 LntuSchoolId 特判强制走 CAS;③ 验证码类型:抓取登录页 JS 确认 captchaSwitch="2" 且 startLogin 走 createSliderCaptcha()(wisedu 定制滑块,非图形验证码),协议与华侨大学完全同源(openSliderCaptcha.htl 取图、sign=AES(JSON.stringify({canvasLength,moveLength,tracks}), 小图 base64 末16字节) 提交 verifySliderCaptcha.htl、errorCode==1 通过),故仅需将 lntu 加入 sliderIds 配置即可复用现有滑块实现(config.toml.example 同步更新);④ 端到端实测:真实待适配账号两次登录均一次通过(gapX=92/149 首候选 offset=0 直接命中 errorCode=1),CAS 302 → 6 cookies(CASTGC/JSESSIONID/MOD_AUTH_CAS/happyVoyage/route/platformMultilingual)→ FetchUserProfile 会话有效;⑤ 按用户要求回滚此前 LoginUrl(忘记密码地址)改动——原地址打不开是因为走了 IAP 入口,改走 CAS 后浏览器可直接打开,无需特殊处理;⑥ 新增 login_lntu_test.go(入口计算 7 用例 + ampUrl 覆盖 + 协议常量),go test ./...、go vet 全过
2026-09-14 23:12:06 +08:00