Vue.js 实现登录验证拦截
154 浏览量
更新于2024-08-28
收藏 64KB PDF 举报
"Vue.js 实现登录拦截"
在前端开发中,登录拦截是一个常见的需求,主要是为了保护用户的隐私和安全,确保只有经过身份验证的用户才能访问特定的页面或功能。在 Vue.js 框架中,我们可以利用路由守卫(Route Guard)来实现这一功能。以下将详细讲解如何在 Vue.js 项目中实现登录拦截。
首先,我们需要创建一个登录页面,这个页面通常包含用户名和密码输入框以及登录按钮。示例代码如下:
```html
<template>
<div class="htmleaf-container">
<div class="demo form-bg">
<div class="container">
<div class="row">
<div class="col-md-offset-3 col-md-6">
<form class="form-horizontal">
<span class="heading">用户登录</span>
<!-- 用户名输入框 -->
<div class="form-group">
<input type="text" class="form-control" id="inputtxt" placeholder="用户名" v-model="username" @blur="inputUserBlur" @focus="inputFocus">
<i class="fa fa-user"></i>
</div>
<!-- 密码输入框 -->
<div class="form-group help">
<input type="password" class="form-control" id="inputPassword3" placeholder="密码" v-model="psd" @blur="inputPsdBlur">
<i class="fa fa-lock"></i>
<a href="#" rel="external nofollow" class="fa fa-question-circle"></a>
</div>
<!-- 记住我选项 -->
<div class="form-group">
<div class="main-checkbox">
<input type="checkbox" value="None" id="checkbox1" name="check"/>
<label for="checkbox1"></label>
</div>
<span class="text">记住我</span>
<!-- 登录按钮 -->
<button type="button" class="btn btn-default" @click="loginBtn">立刻登录</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
username: '',
psd: ''
};
},
methods: {
// 输入框焦点事件
inputFocus() {},
// 输入框失去焦点事件
inputUserBlur() {},
inputPsdBlur() {},
// 登录按钮点击事件
loginBtn() {
// 这里通常会发送登录请求到服务器,验证用户名和密码
// 如果验证成功,将用户名存入本地存储
localStorage.setItem('username', this.username);
// 跳转到首页
this.$router.push('/home');
}
}
};
</script>
```
当用户在登录页面成功验证后,我们将用户名存储在本地存储(例如使用 `localStorage`)。然后,我们可以通过路由守卫来检查用户是否已登录并具有有效的用户名。
在 `router/index.js` 文件中,我们可以设置全局前置守卫(Global Before Guards)或者组件内的路由守卫。这里以全局前置守卫为例:
```javascript
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
const router = new Router({
routes: [
{ path: '/', redirect: '/login' }, // 默认重定向到登录页
{ path: '/login', component: Login },
{ path: '/home', component: Home, meta: { requiresAuth: true } } // 需要登录的页面
]
});
// 全局前置守卫
router.beforeEach((to, from, next) => {
const username = localStorage.getItem('username'); // 获取本地存储的用户名
if (to.meta.requiresAuth && !username) { // 如果目标路由需要登录权限,且本地没有用户名
next('/login'); // 重定向到登录页
} else {
next(); // 其他情况正常跳转
}
});
export default router;
```
这段代码中,我们在 `beforeEach` 钩子函数中检查了即将访问的路由 (`to`) 是否需要登录权限(通过 `meta.requiresAuth` 标志),如果需要且本地没有用户名,则重定向到登录页。
这样,我们就实现了一个简单的登录拦截机制,确保只有登录的用户才能访问特定的页面。当然,实际应用中可能需要更复杂的逻辑,例如处理 token、刷新令牌、路由白名单等,但以上代码提供了一个基础的实现方案。
2020-10-18 上传
2019-08-10 上传
2023-03-23 上传
2020-08-30 上传
2020-12-13 上传
2020-08-28 上传
2020-10-17 上传
点击了解资源详情
2023-05-25 上传
weixin_38733355
- 粉丝: 4
- 资源: 897
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章