uniapp 中使用路由导航守卫,进行登录鉴权

前言: 

在uniapp 使用中,对于登录界面可能需要路由守卫进行方便判断跳转,以下有两种方案,可以判断用户跳转的时候是否是登录状态 

方案一: 

1. 可以使用插件  hh-router-guard

2. 使用 uni-simpe-route

方案二: 使用通过uni提供的拦截器实现, uni.addInterceptor

1.新建interceptor.js 
// ====================== 全局路由拦截器 ======================
// 功能:统一管理路由拦截逻辑(仅使用白名单模式)
// 使用:在 App.vue 的 onLaunch 中调用 initRouteGuard()// 1. 核心配置(支持动态更新)
const routeConfig = {// 白名单:完全开放的页面路径whiteList: new Set(['/modules/login/index','/pages/error/404']),// 动态扩展名单(可从接口加载)dynamicList: new Set()
};// 2. 权限校验逻辑
function checkPermission(url) {const path = url.split('?')[0];console.log('path', path)// 白名单校验if (routeConfig.whiteList.has(path)) {console.log('放行白名单')return true; // 放行白名单页面}// 默认拦截非白名单页面,跳转到登录页//!! 如果tokne存在且有效,返回true ,否则返回fasle const token = uni.getStorageSync('token');console.log('token', token)return !!uni.getStorageSync('token'); // 检查登录状态
}// 3. 拦截器核心方法
const routeInterceptor = {invoke(args) {console.log('启用拦截器', args);if (checkPermission(args.url)) return true;// 未登录跳转登录页(携带来源路径)uni.redirectTo({url: `/modules/login/index?redirect=${encodeURIComponent(args.url)}`});return false; // 阻断原始跳转}
};// 4. 初始化方法(暴露给外部调用)
export function initRouteGuard() {// 注册拦截器(覆盖主要路由方法)uni.addInterceptor('navigateTo', routeInterceptor);uni.addInterceptor('redirectTo', routeInterceptor);uni.addInterceptor('reLaunch', routeInterceptor);console.log('[路由守卫] 已启动');
}// 5. 动态更新白名单方法
export function updateRouteConfig(paths, isReset = false) {// 如果需要重置白名单,先清空if (isReset) routeConfig.whiteList.clear();// 添加新的路径到白名单paths.forEach(path => routeConfig.whiteList.add(path));console.log(`[路由守卫] 已更新白名单:${paths.join(', ')}`);
}
// 6. 扩展:角色权限校验(可选)
export function checkUserRole(requiredRole) {const userRole = uni.getStorageSync('userRole') || 'guest';return userRole === requiredRole;
}

2. 在app.vue  onLaunch中调用    initRouteGuard(); // 启动拦截器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89537.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 262. 行程和用户

1.题目基本信息 1.1.题目描述 表:Trips ----------------------- | Column Name | Type | ----------------------- | id | int | | client_id | int | | driver_id | int | | city_id | int | | status | enum | | request_at | varchar | -----------…

P1102 A-B 数对

P1102 A-B 数对 题目背景 出题是一件痛苦的事情! 相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 题目描述 给出一串正整数数列以及一个正整数 C C C,要求计算出所有满足 A − B = C A - B = C A−B=C 的数对的个数(不同…

devextreme-vue的DxDataGrid如何显示行号列

devextreme-vue我使用的是23.2版本,其DxDataGrid如何显示行号列,官方一直没有方案。 DataGrid - How to display a row number in data rows in Angular | DevExpress Support dxDataGrid - provide capability to display a column with row numbers …

【设计模式06】建造者模式

前言 没什么用,类似于builder.build UML类图 代码示例 package com.sw.learn.pattern.B_create.e_builder;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();for …

datax-web报错:连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境)

文章目录 一、报错内容二、解决方法 一、报错内容 背景描述: 在linux安装了datax202309版本及datax-web2.1.2版本,datax与datax-web默认都是mysql5.x版本的。我的数据库是mysql8.x版本的。 在datax中执行json脚本从一个mysql导入mysql没问题&#xff0…

C#调用C++导出的dll怎么调试进入C++ DLL源码

第一步:首先需要打开C源码,不需要任何设置,直接下断点,然后将生成DLL目录改成到C# exe生成目录里面 第二步:打开winform项目,然后在C#项目属性->启用本地代码调试勾选后即可 最后在C#下断点F10或者F11…

Skyeye 云智能制造办公系统 - Saas v3.16.10 发布

Skyeye 云智能制造,采用 Springboot (微服务) Layui UNI-APP Ant Design Vue 的低代码平台。包含 30 多个应用模块、50 多种电子流程,CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公…

pdf 合并 python实现(已解决)

在Python中,可以使用多种库来合并PDF文件,其中最常用的是PyPDF2和PyMuPDF(又名fitz)。下面我将分别介绍如何使用这两个库来合并PDF文件。 使用PyPDF2 首先,你需要安装PyPDF2。可以使用pip来安装: 先按照库…

VCenter SSL过期,登录提示HTTP 500错误解决办法

报错图: 1. 开启 VCenter ssh远程连接 登录vmware esxi,双击打开VCenter 控制台黑窗口,根据提示按F2键 两次,打开系统设置(有fn键使用fnF2键) 输入root密码,按回车登录 选择“Troubleshooting …

Linux 下安装Oracle 11gR2 x64 netca启动不了

前言 Oracle Network Configuration Assistant (netca) 是 Oracle 提供的图形化网络配置工具,用于简化 Oracle 数据库网络组件的配置和管理。 核心功能 1、配置监听器 (LISTENER)创建、修改或删除数据库监听器(默认端口 1521)定义监听协议…

Pytorch1线性代数实现

Pytorch --线性代数实现 矩阵 正如向量将标量从零阶推广到一阶,矩阵将向量从一阶推广到二阶。 矩阵,我们通常用粗体、大写字母来表示 (例如,𝑋、𝑌和𝑍), 在代码中表示…

行业分享丨泛亚汽车数字化转型实践:虚拟仿真技术如何赋能汽车研发的创新实践?

随着汽车行业向智能化、电动化快速转型,虚拟仿真技术正成为推动产品研发变革的核心驱动力。作为行业技术先锋,泛亚汽车通过系统性布局,构建了完整的虚拟仿真技术体系,并总结出三个关键方向:打造数字化研发体系、探索精…

【硬核数学】4. AI的“寻路”艺术:优化理论如何找到模型的最优解《从零构建机器学习、深度学习到LLM的数学认知》

欢迎来到本系列的第四篇文章。我们已经知道,训练一个AI模型,本质上是在寻找一组参数,使得描述模型“有多差”的损失函数 L ( θ ) L(\theta) L(θ) 达到最小值。微积分给了我们强大的工具——梯度下降,告诉我们如何一步步地向着最…

springboot切面编程

SpringBoot切面编程 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转。本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理。 何为AOP AOP(Aspect OrientedProgramming):面向切面编程&…

【Redis#4】Redis 数据结构 -- String类型

一、前言 1. 基本概念 理解:字符串对象是 Redis 中最基本的数据类型,也是我们工作中最常用的数据类型。redis中的键都是字符串对象,而且其他几种数据结构都是在字符串对象基础上构建的。字符串对象的值实际可以是字符串、数字、甚至是二进制&#xff0…

Spring Boot 集成 Dufs 通过 WebDAV 实现文件管理

Spring Boot 集成 Dufs 通过 WebDAV 实现文件管理 引言 在现代应用开发中,文件存储和管理是一个常见需求。Dufs 是一个轻量级的文件服务器,支持 WebDAV 协议,可以方便地集成到 Spring Boot 应用中。本文将详细介绍如何使用 WebDAV 协议在 Sp…

Unity打包时编码错误解决方案:NotSupportedException Encoding 437

问题描述 在Unity项目开发过程中,经常会遇到这样的情况:项目在编辑器模式下运行完全正常,但是打包后运行时却出现以下错误: NotSupportedException: Encoding 437 data could not be found. Make sure you have correct interna…

Spring Bean的生命周期与作用域详解

一、Spring Bean的生命周期 Spring Bean的生命周期指的是Bean从创建到销毁的整个过程。理解这个生命周期对于正确使用Spring框架至关重要,它可以帮助我们在适当的时机执行自定义逻辑。 1. 完整的Bean生命周期阶段 Spring Bean的生命周期可以分为以下几个主要阶段…

如何将Excel表的内容转化为json格式呢?

文章目录 一、前言二、具体操作步骤 一、前言 先说一下我使用Excel表的内容转为json的应用场景,我们是用来处理国际化的时候用到的。 二、具体操作步骤 第一步:选择要转化Excel表的内容(必须是key,value形式的) 第二…

内存堆栈管理(Linux)

以问题形式讲解 1.每一个进程都有一个堆空间吗?还是多个进程共用一个堆空间? 在操作系统中,​​每个进程都有自己独立的虚拟地址空间,其中包括自己独占的堆空间。堆空间是进程私有的,不与其他进程共享。 进程之间的内…