Vue.js 实现登录验证拦截
9 浏览量
更新于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-12-10 上传
2020-12-13 上传
2020-08-28 上传
2020-12-10 上传
点击了解资源详情
点击了解资源详情
weixin_38733355
- 粉丝: 4
- 资源: 897
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍