Skip to content

页面:登录

字数
1561 字
阅读时间
7 分钟

目的与入口

  • 页面定位:承接 MindGuard 的首次身份校验与会话续期,确保用户在进入“我的”Tab 以及所有需鉴权的操作前建立安全登录态。
  • 入口来源
    • “我的”Tab 未登录状态点击任意主模块或顶部登录提示(参见《页面-我的.md》“模块1:个人概览卡”未登录态)。
    • 任何接口返回 401/E_AUTH_EXPIRED 时弹出全局提示,点击“重新登录”跳转。
    • 需要鉴权的深链接(如任务详情、隐私中心)在进入前检测登录态,若缺失则 redirect 至 /pages/login/index?redirect=<encoded>

交互流程

  1. 触发登录:用户点击“微信一键登录”或在弹窗中确认重新登录。
  2. 授权流程
    • 调用 wx.login 获取临时 code,并展示加载态。
    • 后端 authLogin 云函数根据 code 创建/刷新 users 记录与 sessions 会话。
  3. 验证验证码(必要场景)
    • 若触发风控或频繁失败,界面展示图形验证码或短信二次验证。
    • 用户填写验证码后点击“验证”,错误则出现 Danger-500 语义色提示,可点击“刷新验证码”。
  4. 绑定学号(首次登录或资料缺失时):
    • 登录成功后,弹出绑定学号表单(学号 + 校园统一密码),调用 /api/auth/bind-student
    • 绑定成功写入 users.campus_affiliationusers.student_binding 子对象。
  5. 结果反馈
    • 成功:Toast “登录成功”,延迟 500ms 后根据 redirect 参数或来源页返回。
    • 失败:
      • 网络错误:展示重试按钮和离线提示(信息语义色);允许在离线模式继续浏览非鉴权页面。
      • 验证码错误:输入框标红,辅助文本提示“验证码不正确,请重试”。失败三次自动刷新验证码并冷却 60s。
      • 账号不存在:提示“该账号尚未开通 MindGuard,请联系校方或使用另一微信号”,提供联系客服入口。
      • 封禁/受限:根据 users.status 显示停用说明与申诉指引,禁止继续登录,埋点 login_result(status=restricted)。

UI 模块

  • 头部说明:品牌蓝渐变背景(linear-gradient(180deg,#EEF5FF,#FFFFFF)),文案强调“守护你的心理成长”。
  • 微信一键登录按钮:主按钮使用 --color-brand-500 背景、圆角 48rpx,点击后进入加载态(描边加深至 600),按钮下方提示“登录即表示同意《用户协议》《隐私政策》”。
  • 学号绑定输入框:采用卡片白底 + 投影(参考《样式规范/我的.md》卡片风格),字段包含学号、密码;支持“显示密码”开关。
  • 验证码区块:图形验证码图片占位 240×96rpx,右侧“刷新”次按钮使用描边样式;输入框聚焦时描边颜色 --color-brand-500
  • 协议勾选与隐私提示:复选框默认勾选,可点击跳转协议页面;下方展示“未成年人请先征得监护人同意”等安全提示。
  • 错误提示组件:采用 Danger-50 背景 + Danger-500 文本,并配合警示图标,位置紧贴对应输入框。

路由与返回

  • 页面路径:/pages/login/index
  • 支持 redirect 查询参数,登录成功后使用 wx.redirectTowx.switchTab 返回来源页;若为空且来自“我的”,默认 wx.switchTab({ url: '/pages/mine/index' })
  • 登录页面禁止返回未授权来源页(拦截 navigateBack),提供明确“返回首页”按钮。
  • ensureLoggedIn 公共方法在调用鉴权接口前统一检测登录态,不重复弹出登录页。

无障碍与可访问性

  • 所有表单控件绑定 <label> 并提供 ARIA aria-describedby 指向错误文本。
  • 关键按钮(微信登录、绑定学号、刷新验证码)提供可聚焦态,按键切换时显示描边加粗或阴影变化。
  • 颜色对比满足《色彩系统.md》:文字对比度 ≥4.5:1,错误提示采用 Danger-500 与浅色背景组合,同时提供图标/文案双通道。
  • 登录结果通过 Toast 与可读文本同步播报,失败时附带操作建议。

性能与包体

  • 验证码图片通过 CDN 缓存并附带 cache-bust 参数避免旧图重复;图像资源控制在 ≤20KB。
  • 短信验证冷却提示使用倒计时组件(惰性加载),避免首屏引入额外分包。
  • 登录 JS 逻辑内聚于 services/auth.js,按需加载避免影响其他页面体积。

埋点与数据联动

  • 登录页曝光:pv_login(参数 entry_sourceredirect)。
  • 操作事件:act_login_wechatact_login_bind_studentact_login_captcha_refreshact_login_protocol_toggle
  • 结果事件:login_result(status=success/failed/restricted/cancelled,error_code)。详见《埋点与数据分析.md》更新章节。

验收清单

  • [ ] 未登录从“我的”进入,页面文案、按钮状态符合视觉规范。
  • [ ] 微信一键登录成功后写入 users.last_login_atsessions 记录,返回来源页正确。
  • [ ] 连续三次验证码错误触发冷却提示,重新请求验证码成功。
  • [ ] 封禁用户进入时展示封禁说明,不返回上一页且记录埋点。
  • [ ] 登录后首个需要鉴权的接口(如 /api/tasks)正常返回,未登录时统一跳转登录页。
  • [ ] VoiceOver/安卓 TalkBack 能正确朗读控件与错误信息。

变更记录

  • 2024-04-07:首次整理登录页面文档,补充入口、流程、UI、埋点与验收项。

贡献者

The avatar of contributor named as Cai Hongyu Cai Hongyu

文件历史

撰写