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
英文地址,請注明出處:http://en.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.每一個進程都有一個堆空間嗎?還是多個進程共用一個堆空間? 在操作系統中,??每個進程都有自己獨立的虛擬地址空間,其中包括自己獨占的堆空間。堆空間是進程私有的,不與其他進程共享。 進程之間的內…