当前位置: 首页 > news >正文

vue-15 (实践练习:使用路由防护实现身份验证和授权)

实践:使用路由防护实现身份验证和授权

使用 Route Guard 实现身份验证和授权

身份验证和授权是现代 Web 应用程序的关键方面,确保只有授权用户才能访问应用程序的特定部分。Vue Router 提供了一个强大的机制,称为路由守卫来实现这些安全措施。路由守卫允许您根据特定条件控制对路由的访问,例如用户是否已登录或是否具有必要的权限。本章将深入探讨在 Vue.js 中使用路由守卫进行身份验证和授权的实际实现。

了解路由守卫

Route Guards 是导航到路由时执行的函数。它们可用于拦截导航并允许导航继续、重定向到其他路由或完全取消导航。路由守卫有三种类型:

  • Global Guards: 这些守卫应用于应用程序中的所有 route。
  • Per-Route Guards: 这些守卫应用于特定路由。
  • In-Component Guards: 这些守卫在组件中定义,并在导航到该组件的路线或从该组件的路线导航时应用。

在本课中,我们将重点介绍全局守卫和每路由守卫,因为它们最常用于身份验证和授权。

全局守卫

全局守卫使用 router.beforeEachrouter.beforeResolverouter.afterEach 注册。beforeEach 守卫是最常用于身份验证和授权的。

例:

import { createRouter, createWebHistory } from 'vue-router';const routes = [{ path: '/', component: Home },{ path: '/dashboard', component: Dashboard, meta: { requiresAuth: true } },{ path: '/login', component: Login },
];const router = createRouter({history: createWebHistory(),routes,
});router.beforeEach((to, from, next) => {// Check if the route requires authenticationif (to.meta.requiresAuth) {// Check if the user is logged inif (localStorage.getItem('token')) {// User is logged in, proceed to the routenext();} else {// User is not logged in, redirect to the login pagenext('/login');}} else {// Route does not require authentication, proceednext();}
});export default router;

解释:

  1. 我们为 /dashboard 定义一个路由,并使用 requiresAuth: true 添加一个 meta 字段。这表示此路由需要身份验证。
  2. router.beforeEach 守卫中,我们检查 to 路由(被导航到的路由)是否将 requiresAuth 元字段设置为 true
  3. 如果是这样,我们通过检查 localStorage 中是否存在令牌来检查用户是否已登录。
  4. 如果用户已登录,我们调用 next() 以继续路由。
  5. 如果用户没有登录,我们调用 next('/login') 重定向到登录页面。
  6. 如果路由不需要身份验证,我们调用 next() 以继续路由。

每路由守卫

每个路由守卫是使用 beforeEnter 选项直接在路由配置中定义的。

例:

import { createRouter, createWebHistory } from 'vue-router';const routes = [{ path: '/', component: Home },{path: 
http://www.xdnf.cn/news/778825.html

相关文章:

  • 微软Build 2025:Copilot Studio升级,解锁多智能体协作未来
  • 05 APP 自动化- Appium 单点触控 多点触控
  • 进阶配置与优化:配置 HTTPS 以确保数据安全传输
  • jenkins结合gitlab实现CI
  • 【Zephyr 系列 5】定时器与低功耗控制:打造省电高效的嵌入式系统
  • 建筑工程施工进度智能编排系统 (SCS-BIM)
  • mapbox高阶,生成并加载等时图
  • LabVIEW基于 DataSocket从 OPC 服务器读取数据
  • Spring AI Advisor机制
  • 【信创-k8s】海光/兆芯+银河麒麟V10离线部署k8s1.31.8+kubesphere4.1.3
  • MySQL 如何判断某个表中是否存在某个字段
  • 【数据结构 -- B树】
  • 使用 HTML + JavaScript 实现文章逐句高亮朗读功能
  • n8n 自动化平台 Docker 部署教程(附 PostgreSQL 与更新指南)
  • Java数据校验:确保数据完整性和正确性
  • Spring Cloud Eureka:微服务架构中的服务注册与发现核心组件
  • 定时器时钟来源可以从输入捕获引脚输入
  • HashMap 的底层原理
  • 小白的进阶之路系列之十二----人工智能从初步到精通pytorch综合运用的讲解第五部分
  • 网络安全问题及对策研究
  • Java面试八股--08-数据结构和算法篇
  • JavaWeb是什么?总结一下JavaWeb的体系
  • MQTTX连接阿里云的物联网配置
  • Linux 下 ChromeDriver 安装
  • 70道Hive高频题整理(附答案背诵版)
  • Express教程【006】:使用Express写接口
  • “草台班子”的成长路径分析
  • 基于InternLM的情感调节大师FunGPT
  • Cilium动手实验室: 精通之旅---1.Getting Started with Cilium
  • 深度学习学习率调度器指南:PyTorch 四大 scheduler 对决