自动化一换账号,任务竟然全完成了?先检查幂等键
做每日任务助手时,很容易写出这样的状态路径:state/2026-10-13.json。第一次运行记录完成,第二次运行跳过,看起来已经实现了幂等。
但只要同一天切换账号,新账号就可能读到旧账号的完成记录。脚本没有报错,也没有真正执行任务,只是稳定地跳过了所有事情。这次修复让我重新梳理了三个边界。
一、日期不是完整身份
每日任务至少需要账号、业务日期、任务ID三个维度。状态目录可以保持简单:
state/accounts/<account>/<date>/task-snapshot.json
state/accounts/<account>/<date>/points.json
state/accounts/<account>/<date>/qa-completion.json
账号标识来自实际登录页面的核验,不能根据文件名猜。没有当天已核验身份时,应明确停止执行,不沿用昨天的账号。账号名进入路径前还应拒绝斜线、父目录跳转和特殊目录名,避免路径穿越。
二、凭据和产物一起隔离
只隔离状态还不够。若完成记录属于账号B,调用凭据仍属于账号A,任务还是会发错地方。
凭据登记要绑定账号,每次调用前核对。显式指定凭据文件也不能绕过检查。历史凭据只能在原账号一致时兼容读取,不能自动迁给新账号。
产物也按账号和日期组织。网络盘未挂载时停止写入,不在本机创建同名目录冒充挂载盘。写入时拒绝符号链接和越界文件名,并限制单文件和整批大小。
三、完成和到账分别验收
工具返回成功,只能证明调用结束。任务页面显示完成、积分明细出现奖励,是另外两层证据。
例如,语音已经转写、发送并收到回答,但任务卡暂时仍显示待完成,此时应记录“已执行,等待核验”,而不是再次调用。否则平台同步延迟就变成了重复请求。
我为问答独立保存完成回执。同账号、同一天有完成证据时,即使新快照暂时显示待完成,也不自动重跑。余额只按官方页面实测记录,不用本地奖励相加推算。
最小验收清单
本次用临时目录完成了离线验证,未调用真实云接口:
- 同日切换两账号,状态、尝试次数、积分和凭据不串用。
- 切回原账号,历史完成记录仍保留。
- 跨日但未重新核验身份时,执行明确失败。
- 已完成问答不会因任务卡暂时回退而重新调用。
- 产物写入拒绝符号链接、越界名称和超限内容。
离线验证不能证明线上奖励到账,因此仍需核验页面和积分明细。考试、作品审核和第三方采纳也不能包装成脚本可以保证的结果。
幂等不只是“发现文件就跳过”,而是针对同一个业务身份只产生一次已核验结果。先明确“同一个”指谁、哪一天、哪项任务,换号后的自动化才不会悄悄失效。
- 点赞
- 收藏
- 关注作者
评论(0)