手把手教你理解校园 OJ 登录系统:从输入密码到进入首页
一、前言:登录系统的“三件套”
想象一下你要进宿舍楼:
- 门禁卡(token) - 证明你是楼里的学生
- 保安(路由守卫) - 检查你有没有门禁卡
- 楼长(Vuex) - 登记你的入住信息
我们的登录系统就是这样的三级验证机制!
二、核心模块详解
1. Token 管理系统 - auth.js(你的电子门禁卡)
这个文件专门管理你的“门禁卡”(token):
|
|
比喻理解:
localStorage= 你的钱包,专门放重要卡片TOKEN_KEY= 卡包里的特定卡槽,只放门禁卡- 每次进出,保安只看这个卡槽有没有卡
2. 通信专员 - request.js(你的专属信使)
这个文件负责和后端服务器对话,就像你有个专属信使:
|
|
信使工作流程图:
|
|
3. 用户服务接口 - user.js(能办的四件事)
这个文件定义了你能让信使办的四件事:
|
|
通俗理解:
- 每个
export function就像一张办事指南 request()就是让信使按指南办事- 返回值是一个Promise(承诺书),承诺会给你结果
4. 用户管理中心 - user.js (store/modules)(楼长的登记簿)
这里是 Vuex 的用户模块,负责管理所有用户相关的全局状态:
|
|
Vuex 核心概念(必须理解!):
state= 当前的状态(现在有什么)mutations= 能做什么修改(只能通过这里改!)actions= 做事的流程(可以包含异步操作)
修改状态的标准流程:
|
|
5. 快捷访问门 - getters.js(快速查询通道)
这个文件提供快速查询状态的方法:
|
|
为什么需要 getters?
- 就像图书馆的查询机,不用自己去书库翻
- 统一的查询接口,避免拼写错误
- 可以计算衍生数据(如
isLogin)
6. Vuex 总仓库 - index.js(所有登记簿的集合)
这里是 Vuex 的入口文件,整合所有模块:
|
|
模块化设计的好处:
- 用户数据放
user模块 - 题目数据放
problem模块 - 提交记录放
submission模块 - 互不干扰,清晰明了
7. 登录页面 - AppLogin.vue(前台接待处)
这是用户看到的登录界面:
|
|
页面组件关键点:
useRouter()- 获取导航员,用于页面跳转useStore()- 获取楼长,用于状态管理store.dispatch()- 让楼长办事(异步操作)router.push()- 让导航员带路
三、完整登录流程(故事版)
让我们跟着"小明"走一遍完整流程:
第一幕:来到登录页面
小明打开浏览器,输入 OJ 平台网址,看到登录页面(AppLogin.vue)。
第二幕:填写信息
小明输入:
- 用户名:
xiaoming - 密码:
123456
第三幕:点击登录按钮
|
|
第四幕:信使出发
|
|
第五幕:服务器验证
|
|
第六幕:信使归来
|
|
第七幕:楼长登记
|
|
第八幕:获取完整信息
|
|
第九幕:页面跳转
|
|
第十幕:后续访问
小明第二天再访问:
|
|
四、关键概念精讲
1. 什么是 Token?
比喻:Token 就像酒店的房卡。
- 办入住时(登录)给你一张
- 每次进房间(访问页面)要刷卡
- 退房时(退出登录)收回
- 过期了要重新办(token 过期)
2. localStorage vs sessionStorage
|
|
3. Promise 异步处理
比喻:叫外卖的过程
|
|
4. Vuex 数据流
|
|
五、常见问题解答
Q1:为什么登录后页面刷新,又变未登录了?
可能原因:
- token 没存进 localStorage(检查
setToken) - 刷新后 Vuex 的 state 重置了,但 token 还在 localStorage
- 需要在
main.js或App.vue初始化时从 localStorage 读 token
Q2:如何实现"记住我"功能?
|
|
Q3:多个标签页同时登录怎么办?
|
|
Q4:如何防止 XSS 攻击盗取 token?
安全措施:
- token 设置合理过期时间
- 使用 HttpOnly Cookie(后端设置)
- 重要操作需要二次验证
- 定期更换 token
六、登录系统架构总结
|
|
|
|
七、给新手的黄金法则
法则 1:先理解流程,再写代码
画个流程图,搞清楚"点击登录"到"进入首页"中间发生了什么。
法则 2:分层思考,各司其职
- auth.js:只关心 token 存哪、怎么取
- request.js:只关心怎么发请求、怎么处理响应
- store:只关心数据怎么存、怎么改
- 组件:只关心用户怎么交互、数据怎么展示
法则 3:错误处理要全面
每个可能出错的地方都要有应对方案:
- 网络错误
- 服务器错误
- 用户输入错误
- token 过期错误
法则 4:用户体验要友好
- 登录中显示 loading
- 错误提示要明确
- 成功后有反馈
- 记住用户上次操作
八、下一步学习方向
掌握了登录系统后,你可以继续学习:
- 权限管理:不同角色看到不同菜单
- 路由守卫:更精细的访问控制
- 第三方登录:微信、QQ 快速登录
- 双因素认证:密码+手机验证码
- 单点登录:一个账号通行所有系统
记住,登录系统是 Web 应用的大门,大门设计得好不好,直接影响用户体验和系统安全。现在你不仅知道怎么用,还知道为什么这样设计,这就是成为高级开发者的第一步!
加油,你已经掌握了现代前端登录系统的核心原理!🚀