二维码过期需前端主动监听后端410/4001响应或本地软过期(如2分钟),立即终止轮询、隐藏码并显示“已失效·点击刷新”,支持点击重获新码,后端须用明确错误码区分状态。

扫码登录二维码过期,本质是后端生成的临时凭证(如 qrcodeId 或 ticket)已失效,前端轮询时收到 401/403/410 等状态码或明确的 {"code": 4001, "msg": "二维码已过期"} 响应。处理核心是:**及时感知、优雅降级、引导重试**。
监听过期响应并主动终止轮询
不要等超时才停,要根据接口返回明确判断:
- 后端应在二维码过期时返回标准错误码(如 HTTP 410 Gone 或自定义 code=4001),前端需在轮询回调中检查该字段
- 一旦识别到过期信号,立即
clearInterval或取消 Axios 的 cancelToken / AbortController - 避免继续轮询造成无意义请求和用户困惑
前端主动控制二维码生命周期
不完全依赖后端过期,可在 JS 层加一层“软过期”保护:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 生成二维码时记录本地时间戳,轮询时对比是否超过预设有效期(如 2 分钟)
- 即使后端尚未返回过期响应,本地先隐藏二维码、显示“已失效”,并触发刷新逻辑
- 这样可减少因网络延迟导致的“看起来还能扫但实际失败”的体验断层
提供清晰反馈与一键刷新入口
用户对“过期”无感知,需要视觉+操作双重引导:
立即学习“Java免费学习笔记(深入)”;
- 二维码区域旁固定提示文字,初始为“请使用微信扫描”,过期后变为红色“二维码已失效 · 点击刷新”
- 整个二维码容器支持点击,点击后重新调用获取二维码接口,更新
qrcodeId和图片 URL - 刷新时禁用按钮、显示 loading,防止重复提交
后端配合建议(影响前端健壮性)
前端处理再好,也依赖后端提供可判断的信号:
- 过期响应必须带明确标识:HTTP 状态码(推荐 410 Gone) + JSON body 中含
"code": 4001或"status": "expired" - 不要只返回 200 +
{"status":"waiting"},过期时也返回 200 —— 这会让前端无法区分“还没扫”和“不能扫了” - 提供独立的「检查二维码状态」接口(而非复用轮询接口),便于前端做预检或重试前校验

















