ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

vue-cms 登录功能实战:Canvas 验证码组件 + Token 鉴权全流程拆解

vue-cms 登录功能实战:Canvas 验证码组件 + Token 鉴权全流程拆解 vue-cms 登录功能实战Canvas 验证码组件 Token 鉴权全流程拆解【免费下载链接】vue-cms基于 Vue 和 ElementUI 构建的一个企业级后台管理系统项目地址: https://gitcode.com/gh_mirrors/vu/vue-cmsvue-cms 是一个基于 Vue 和 ElementUI 构建的企业级后台管理系统它的登录功能设计得相当完整前端用Canvas 验证码组件防止暴力破解后端用Token 鉴权维持登录态中间还串联了表单校验、路由守卫、动态权限菜单等一系列机制。本文将从源码角度一步步拆解这套登录功能的全流程实现帮你在自己的 Vue 项目中快速复用。登录页面的整体结构左右分栏 表单校验登录页位于src/views/login/index.vue整体采用左右分栏布局左侧是品牌展示区动态背景光斑、旋转圆环、漂浮卡片等 CSS 动画右侧是登录表单。表单包含三个输入项账号、密码、验证码全部通过 ElementUI 的el-formrules完成校验。校验规则中值得一提的细节是验证码校验器它会把用户输入和 Canvas 组件生成的真实验证码做大小写不敏感的比较输入为空或错误时直接阻止表单提交从入口处拦截非法请求。Canvas 验证码组件纯前端生成无需后端接口验证码组件位于src/components/captcha/index.vue是一个标准的 Vue 单文件组件。它的核心设计如下字符集过滤易混淆字符随机码从ABCDEFGHJKLMNPQRSTUVWXYZ...中抽取刻意去掉了0、O、1、I、l等难以辨认的字符降低用户输错概率。干扰元素丰富每次刷新会随机绘制 4 条干扰线、20 个干扰点每个字符还会在 ±15° 范围内随机旋转大幅增加机器识别的难度。暗色主题自适应组件会读取html上的data-theme属性暗色模式下自动切换深色背景和亮色文字保证两种主题下验证码都清晰可辨。点击即刷新整个canvas绑定了clickrefreshCaptcha用户看不清可以无限次点击刷新。生成的验证码通过$emit(change, code)事件实时同步给登录页登录页拿到后在validateCaptcha中完成比对整个过程不依赖任何后端接口非常适合纯前端演示或 mock 阶段使用。Token 鉴权登录成功后的一次性握手验证码通过后表单会调用 Vuex 中的loginaction见src/store/modules/user.js流程非常清晰调用src/api/login.js中的login(userInfo)发起 POST 请求后端返回token、permissions权限列表、userInfo用户信息Token 通过src/common/auth.js中的setToken写入Cookie使用js-cookie库key 由环境变量VUE_APP_Cookie_Key控制权限和用户信息写入sessionStorage见src/common/session-storage.js统一挂在__vue_cms__命名空间下同步提交 Vuex mutation更新页面状态最后跳转首页。在 mock 模式下src/mock/modules/login.js和src/mock/modules/user.js内置了admin和lucy两个测试账号密码都是123456登录页右上角也有提示按钮方便新手直接上手体验。axios 拦截器每个请求自动携带 Token拿到 Token 之后后续所有业务请求都要带上它否则后端会拒绝。这部分逻辑统一收敛在src/utils/request.js的axios 请求拦截器中每次请求前从 Cookie 读取 Token写入Authorization: Bearer xxx请求头同时写入Accept-Language请求头告诉后端当前界面语言支持中英文切换GET 请求会自动拼接时间戳参数强制绕过浏览器缓存响应拦截器会统一处理业务错误码遇到50008非法 Token、50012异地登录、50014Token 过期时弹出确认框并调用user/resetToken强制重新登录。这种一处配置、全局生效的做法是 Vue 后台管理系统处理 Token 鉴权的标准姿势。路由守卫未登录自动跳转登录页src/permission.js是全局路由守卫的核心它定义了完整的访问控制逻辑白名单机制/login、/404等页面无需登录即可访问有 Token 访问登录页直接重定向到首页避免重复登录无 Token 访问业务页清空 session 并重定向到/login?redirectxxxredirect参数记录了用户原本想去的页面登录成功后自动跳回动态路由恢复如果刷新页面导致内存路由丢失会从 sessionStorage 读取权限列表通过permission/generateRoutes重新生成并addRoutes动态注册路由保证刷新不丢菜单。这套守卫逻辑让登录 → 鉴权 → 动态路由形成了完整闭环。登录失败的细节处理自动刷新验证码登录页对失败场景也做了贴心处理当登录接口报错时会自动调用验证码组件的refreshCaptcha()刷新验证码并清空输入框防止用户因反复输错验证码而卡在表单里。此外记住密码功能用localStorage见src/common/local-storage.js持久化账号密码勾选后下次打开页面自动回填属于企业后台非常实用的体验细节。小结一套可直接复用的登录鉴权模板回顾整个流程表单校验拦截 → Canvas 验证码人机校验 → 登录接口换取 Token → Cookie 存储 → axios 拦截器自动携带 → 路由守卫控制访问 → 动态权限路由恢复。vue-cms 用不到 10 个核心文件就把企业级后台的登录鉴权链路打通了如果你想学习 Vue 登录功能实战或者需要一个能直接改造的模板clone 项目后重点阅读src/views/login/index.vue、src/components/captcha/index.vue、src/store/modules/user.js、src/utils/request.js和src/permission.js这五个文件就能快速掌握整套思路。用 Vue 开发后台管理系统登录功能永远是第一道关卡把验证码和 Token 鉴权这两件事想清楚后面的权限菜单、动态路由都会顺理成章。【免费下载链接】vue-cms基于 Vue 和 ElementUI 构建的一个企业级后台管理系统项目地址: https://gitcode.com/gh_mirrors/vu/vue-cms创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表