vue-element-admin实现login和logout

本文介绍基于花裤衩的vue-element-admin模板改造前端后台管理系统的方案,数据库用黑马教程电商管理系统的.sql文件。详细步骤包括克隆项目、去掉eslint、安装依赖、启动项目,还涉及后端登录接口编写、修改baseurl、实现登录与退出登录等操作。

【注】本篇文章介绍的是基于花裤衩(链接地址)的vue-element-admin模板改造的一个前端的后台管理系统解决方案,数据库运用的是(mysql)黑马教程的电商管理系统的.sql文件,操作步骤来自于网络资料和自己不断尝试的合集,感谢参考和建议!


克隆项目

去链接里面clone花裤衩的模板
基础模板: vue-admin-template
集成方案: vue-element-admin

去掉eslint

为避免以后运行项目报错,将package.json中的eslint文件都删掉(有4个),以最新版搜索结果为准
在这里插入图片描述
同时将下面这两个文件也删掉
在这里插入图片描述

安装依赖

终端命令行切换到当前目录,安装依赖:npm installnpm icnpm installcnpm i。任选一个命令,cnpm更快一些

启动项目

运行npm run devcnpm run dev进入到登录界面
在这里插入图片描述

后端编写登录接口

由于我前面讲到这里借用的黑马的,我自己也不懂后端,就跳过了

修改baseurl

编辑.env.development文件

在这里插入图片描述
在这里插入图片描述

修改vue.config.js

在这里插入图片描述
进行的proxy的设置可以解决跨域问题
在这里插入图片描述

npm run dev重新运行,点击登录查看是否配置生效

成功的样式如下图实例:
在这里插入图片描述

实现登录

下面就开始疯狂的回推检索操作~

找到登录请求

找到目录/src/views/login/index,打开它,可以看到发送登录请求的操作
出现this.$store,看到这个东西就去store目录下面找东西
在这里插入图片描述

找到store中的user.js

找到目录/src/store/modules/user.js,打开它
在这里插入图片描述
找到login所对应的函数:
在这里插入图片描述
在这里插入图片描述

找到user的api

因为所有接口都来自于api,所以直接去/src/api中找user
在这里插入图片描述
发现api直接return 一个request,这又是啥操作,继续找request(【注】因为我们已经修改了baseurl,这里的请求url需要做相应的修改)
在这里插入图片描述

找到request模块

找到目录/src/utils/request.js
在这里插入图片描述
打开一开,原来request是封装好的axios,主要用来发送网络请求(【注】这里的验证状态,要根据自己api的返回结果来 做修改,例如我成功的返回状态是:res.meta.status === 200;提示信息是:res.meta.msg)
在这里插入图片描述

修改配置后,npm run dev重新启动

发现报错,没有定义一个东西
在这里插入图片描述
借鉴大佬的方法,直接将request注册到全局
在/src/main.js中注册request方法:
在这里插入图片描述
如果接口请求需要token,忽略对token的修改,这里是把token写死,访问接口会报错
注册全局后,发现接口可以访问,返回参数也正确,但点击登录不能跳转???
一步步回推,发现/src/store/modules/user.js中需要一个data
在这里插入图片描述
发现没有data,去mock中取一个死数据放过来
找到/mock/user.js
在这里插入图片描述
继续找token[username]
在这里插入图片描述
继续找“admin-token”
在这里插入图片描述
直接将这个数据拿过来,将/src/stroe/modules/user.js中的内容进行修改
在这里插入图片描述
token到这里结束
修改后,发现仍然报错404,又发现一个info接口,继续查查这个接口那里来的
全局搜索一下,发现在/src/api/usr.js中有一个getInfo接口
在这里插入图片描述
在/src/store/modules/user.js中也发现了getInfo的内容
在这里插入图片描述
大佬金句:
在这里插入图片描述
于是,展示修改:
在这里插入图片描述
然后,重新启动!!!终于终于…登录成功
在这里插入图片描述

实现退出登录

找到退出登录的操作按钮

/src/layout/components/Navbar.vue文件
在这里插入图片描述
【注】注销登录可以调用user/resetToken直接清除前端的cookie记录,不去与后端交互

定义resetToken这个方法

找到目录/src/store/modules/user.js
在这里插入图片描述
然后就发现退出登录这个功能就实现了!!!

### 关于 `vue-element-plus-admin` 登录功能的实现与常见问题 #### 登录功能的核心逻辑 在基于 Vue3 TypeScript 的前端框架中,登录功能通常涉及以下几个方面:用户认证、Token 存储管理以及权限控制。以下是针对 `vue-element-plus-admin` 中登录功能的具体说明: 1. **用户认证流程** 用户通过表单提交用户名密码到后端接口进行验证。如果验证成功,则返回一个 Token(通常是 JWT)。此过程可以通过 Axios 请求来完成[^1]。 ```typescript import axios from 'axios'; const login = async (username: string, password: string): Promise<any> => { try { const response = await axios.post('/api/auth/login', { username, password }); return response.data; } catch (error) { console.error('Login failed:', error); throw error; } }; ``` 2. **Token 存储与读取** 成功获取 Token 后,将其存储在本地存储(如 localStorage 或 sessionStorage)以便后续请求携带该 Token 进行身份验证。 ```javascript // 存储 Token 到 localStorage localStorage.setItem('token', token); // 获取 Token function getToken(): string | null { return localStorage.getItem('token'); } // 清除 Token function clearToken() { localStorage.removeItem('token'); } ``` 3. **权限路由配置** 动态加载用户的权限路由是现代管理系统中的重要部分。当用户登录时,需从后端拉取其对应的权限数据并动态注入到路由表中[^3]。 ```typescript import router from '@/router'; import store from '@/store'; export function resetRouter() { router.matcher = createRouter().matcher; // Reset the matcher to avoid duplicate routes } export function addDynamicRoutes(routes: any[]) { routes.forEach(route => { router.addRoute(route); // Add dynamic route }); } ``` 4. **登出操作** 当用户点击退出按钮时,清除当前会话状态,并重定向至登录页。 ```typescript const logout = () => { clearToken(); // Clear stored token resetRouter(); // Reset all added dynamic routes window.location.href = '/login'; // Redirect to login page }; ``` --- #### 常见问题及其解决方案 1. **登录后未跳转首页** 如果用户登录后未能自动跳转至主页,可能是因为缺少全局守卫设置或路径匹配错误。确保在路由文件中设置了正确的导航逻辑。 ```typescript router.beforeEach((to, from, next) => { if (!getToken()) { if (to.path !== '/login') { next({ path: '/login' }); // If not logged in, redirect to login page } else { next(); } } else { next(); } }); ``` 2. **Token 失效处理** 需要监听 HTTP 请求失败的情况,在拦截器中捕获 401 错误码,并提示用户重新登录。 ```typescript axios.interceptors.response.use( (response) => response, (error) => { if (error.response.status === 401) { ElMessage({ message: 'Session expired, please log in again.', type: 'warning', }); setTimeout(() => { logout(); // Call logout method when session expires }, 1500); } return Promise.reject(error); } ); ``` 3. **多级嵌套菜单支持不足** 对于复杂的业务场景,例如字典项下的子信息展示,原生模板可能无法完全覆盖需求。此时可以自定义组件或者扩展已有模块的功能[^2]。 --- ### 总结 上述内容涵盖了 `vue-element-plus-admin` 在登录功能方面的基本实现方式及一些常见的开发注意事项。开发者可以根据实际项目的需求调整代码细节,同时建议深入研究官方文档及相关社区资源以获得更全面的技术指导。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值