用户重复点击登录按钮,第二次回调提示 code 无效。乍看像缓存或者权限的锅,追下去往往不是。

if (!redis.set('wxcode:' + code, 1, nx=True, ex=300)) return fail();

追下去是这么回事:授权码只能使用一次,重复提交时已在上一次被消费。

「微信登录 code」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。

具体做法是,回调后立即标记已使用;处理逻辑放到一次性的会话中;前端阻止重复点击。

验收就看一点,重复回调不再报错,用户正常登录。

作者 9823189