为贴近真实考试体验,「破境刷题」增加了 PC 端电脑机考模拟系统。用户无需在 PC 端输入账号密码, 而是通过小程序扫码完成授权。本文介绍该功能的技术方案。
整体流程
- PC 浏览器打开机考页面,请求后端创建二维码会话
- 后端生成
sessionId,写入 Redis(TTL 300 秒),返回二维码图片 - PC 端每 2 秒轮询会话状态,同时显示倒计时
- 用户在小程序「机考扫码」页扫描,携带 miniToken 确认授权
- 后端校验用户身份,签发 PC 专用 token,PC 端检测到 confirmed 后进入选卷
二维码内容设计
二维码文本格式为 CEXAM:{sessionId},小程序扫码后解析 sessionId,
调用确认接口。这种方式不依赖微信开放平台网站应用扫码,实现更简单。
// 后端 Redis 存储结构
{
"status": "pending",
"createdAt": 1718000000000
}
// 确认后
{
"status": "confirmed",
"token": "pc_token_xxx",
"user": { "nickName": "...", "subjectName": "..." }
}
PC 端界面
机考页采用原生 HTML/CSS/JS,仿官方医学机考配色与布局,包含: 扫码登录 → 选卷(往年真题 / 章节练习)→ 考前规则 → 作答 → 交卷结果。
登录页二维码下方需实时显示「300 秒内有效」倒计时,到期自动提示刷新。 右上角提供退出登录,清除 localStorage 中的 token 回到扫码页。
安全注意点
- 二维码会话短时效(300 秒),过期自动失效
- PC token 与小程序 token 分离,便于独立吊销
- 确认接口必须校验小程序端已登录用户
小结
扫码登录让 PC 机考与小程序账号体系打通,用户科目、授权状态保持一致。 该方案实现成本低、体验流畅,适合个人开发者的刷题类产品扩展桌面端场景。