Activity 6.1: Creating a Secure Members Area in Your Library App
本页目录· 12 条
Learning Objective
- 通过使用Vue Router和条件渲染,实现登录系统和安全的会员专区。
- 利用 Vue Router 官方文档,成功实现中级路由功能。
Background
并不是网站的所有页面都应该对公众开放。在这个活动中,你将创建一个 登录页面,并将图书馆应用中的某些部分限制为 仅登录用户可访问。
Requirements
- 创建一个带有用户名和密码字段的 登录页面。
- 创建一个 拒绝访问页面(Access Denied),用于显示给未认证的用户。
- 实现一个简单的身份验证系统(暂时使用硬编码的账号和密码)。
- 限制某些路由(例如 About 页面)只能由认证用户访问。
- 当未认证用户尝试访问受限路由时,将其重定向到登录页面。
- 已认证用户显示 注销 (Logout) 选项。
实现流程
1. Login Page
- 创建一个新的视图文件
LoginView.vue。 - 使用
v-model实现输入字段的双向绑定 - 实现一个方法来处理表单提交
- 更新路由配置 - 在 src/router/index.js 中添加登录页面路由
- 更新导航组件 - 在 BHeader.vue 中添加登录链接
<BHeader.vue>
2. Authentication
- 验证用户输入的用户名/密码,并在应用中存储认证状态(例如
isAuthenticated)。 - 建议使用 Vue 的
ref()来管理这个状态。 - 本练习中,使用硬编码的用户名和密码进行验证
- 添加硬编码的凭据
- 实现验证逻辑
- 添加成功登录后的处理
- 使用 Vue Router 进行页面跳转
3. Authenticated users (Successful login)
- 如果用户输入了正确的凭证,则允许其访问 About 页面。
4. Redirecting Unauthenticated Users
- 如果用户未登录(凭证不正确),则不允许打开 About 页面。
- 提示:可以通过导航守卫(Navigation Guards)来实现这一功能。
- 为 About 页面添加 meta 属性,标记为需要身份验证
- 添加全局前置守卫来检查用户身份验证状态
- 未认证用户尝试访问 About 页面时重定向到登录页面
Console中使用localStorage.clear() 清除登录状态
访问http://localhost:5173/login 将跳转login
5. Conditional Rendering
- 使用
v-if和v-else指令,根据用户认证状态显示不同的内容。 - 可以考虑创建一个导航组件,根据用户是否登录来改变菜单内容。
6. Logout Functionality
- 使用 Vue Router 在注销后跳转回登录页面。
Summary
1. src/views/LoginView.vue - 新建文件
实现内容:
- ✅ 创建了完整的登录页面
- ✅ 使用 v-model 实现用户名和密码字段的双向绑定
- ✅ 硬编码身份验证系统(用户名:admin,密码:password123)
- ✅ 表单验证和错误消息显示
- ✅ 登录成功后存储状态到 localStorage
- ✅ 自动跳转到首页功能
- ✅ 与现有页面风格保持一致的 Bootstrap 样式
2. src/router/index.js - 路由配置更新
实现内容:
- ✅ 添加了登录页面路由 (/login)
- ✅ 为 About 页面添加了 meta: { requiresAuth: true } 属性
- ✅ 实现了全局前置守卫 (router.beforeEach)
- ✅ 路由保护机制:未认证用户访问 /about 时自动重定向到 /login
- ✅ 身份验证状态检查逻辑
3. src/components/BHeader.vue - 导航组件更新
实现内容:
- ✅ 添加了登录页面链接到导航栏
- ✅ 实现了条件渲染:根据登录状态显示不同内容
- 未登录:显示 "Login" 链接
- 已登录:显示 "Welcome, [用户名] ▼" 下拉菜单
- ✅ 添加了注销功能
- ✅ 实现了响应式状态管理
- ✅ 自定义事件系统来同步组件间的状态变化
- ✅ 下拉菜单的显示/隐藏控制
4. src/main.js - 主入口文件更新
实现内容:
- ✅ 导入了 Bootstrap JavaScript 支持 (bootstrap.bundle.min.js)
- ✅ 确保 Bootstrap 下拉菜单功能正常工作
具体功能实现
- 登录页面:完整的表单和验证系统
- 身份验证:硬编码的用户名/密码验证
- 路由保护:About 页面仅限登录用户访问
- 重定向机制:未认证用户自动跳转到登录页面
- 条件渲染:根据登录状态动态显示导航选项
- 注销功能:完整的登录/注销流程