验证码有效期与重发间隔需明示
别名: 验证码过期 · 重发倒计时 · OTP TTL
概念解释
一次性码有两段时钟:有效期(过了就不能再用来登录)和重发间隔(再要一条之前必须等)。明示指人在输入屏上能看见这两段分别还剩多久,以及过期后该做什么,而不是只在提交失败后才说「验证码无效」。这条管时钟的可见性,不管码怎么贴进框,也不管猜错几次该锁。
机制
OTP 把人放进一个看不见的倒计时里。短信延迟、邮件进垃圾箱、切去看码再回来,都会让「我以为还有效」和「服务器已经作废」错位。失败文案若只说「错误」,人无法区分打错、过期、还是发到了别的号码。重发按钮若无间隔说明,会被连点,通道被限流后看起来像系统坏了。两段时钟职责不同:有效期保护码的猜测窗口,重发间隔保护通道与成本;把它们合成一个「60 秒后再试」会让人在码还有效时丢掉旧码、或在码已死后仍死等不能重发。可见的分母让等待可计划,而不是盲目刷新。
怎么研究
操纵时钟信息是否出现、两段时钟是否分开,测量过期附近的行为和主观原因归因。
自变量:是否显示剩余有效秒数、重发是否有独立倒计时、过期文案是否区分「已过期」与「不匹配」。 因变量:过期后仍提交的次数、无效重发点击、把延迟当成失败而放弃的比例、对「我该等还是该重要」的判断正确率。
实验室网络很快,短信延迟接近零,测不到真实错位。应用层可用注入延迟或把 TTL 收到数十秒来观察。不要把「有倒计时就完成更快」当成目标——目标是归因正确:人在过期时选择重发,在有效时选择等待或粘贴已收到的码。
边界
验证器 App 的 TOTP 本身就是滚动时钟,产品再叠一个「五分钟有效」会与令牌窗口冲突,应服从验证器周期而不是另造 TTL 文案。无障碍用户可能听不清每秒跳动的读数,倒计时要以低频更新或静态「约 N 分钟内有效」补充。邮件 OTP 的传输延迟方差大,过短的明示有效期会制造大量「我刚收到就已经死了」;时钟必须覆盖通道的典型迟到,而不是只覆盖计算时间。登录页被系统杀掉后,时钟状态要在返回时重建,不能假装还是刚发送。
怎么落地
- 在 OTP 输入屏同时显示「此码在 hh:mm:ss 前有效」和「N 秒后可重发」,两段独立倒计时,重发启用时旧码是否作废要写明。
- 提交失败按原因分支:不匹配、已过期、尚未到达(若可探测),禁止统一成「验证码错误」。
- 重发产生新码时作废旧码,并重置有效期显示,避免人贴上一条已失效的短信。
- 验证:把 TTL 收到可观察的短窗口,让未参与设计的人在码死后操作一次,看其是否主动点重发且能解释为什么;再在间隔未到时连点重发,界面应挡住并说出还要等多久,而不是静默失败。