uniapp小程序添加路由全局限制,增加路由白名单,登录后接口跳转参数正常传递

uniapp小程序添加路由全局限制,增加路由白名单,登录后接口跳转参数正常传递

** 组件存放的位置 /utils/router.js**

复制代码
import pagesJson from '@/pages.json'; // 引用配置文件的tabbar配置信息
const tabBarListData = pagesJson.tabBar.list
// 路由白名单
const whiteList = [
  '/pages/index/index',
  '/pages/mine/index',
  '/pages/login/index'
]

// tabBar 页面路径
const tabBarList =  tabBarListData.map(item => `/${item.pagePath}`)

// 保存原始路由方法
const originalNavigateTo = uni.navigateTo
const originalRedirectTo = uni.redirectTo
const originalSwitchTab = uni.switchTab
const originalNavigateBack = uni.navigateBack

// 路由拦截处理
function routerInterceptor(args) {
  return new Promise((resolve) => {
    let url = args.url
    if (!url) return resolve(true)

    // 1. 获取当前要跳转的路径(不带参数)
    const toPath = url.split('?')[0]

    // 2. 白名单直接放行
    if (whiteList.includes(toPath)) {
      return resolve(true)
    }

    // 3. 判断是否登录
    const token = uni.getStorageSync('token')
    if (!token) {
      // 未登录 → 存起来跳转目标,登录后自动回去
      uni.setStorageSync('redirectUrl', url)
      
      // 跳转登录页
      uni.redirectTo({
        url: '/pages/login/login'
      })
      return resolve(false)
    }

    // 4. 已登录 → 放行
    resolve(true)
  })
}

// 开始全局拦截
uni.navigateTo = async function(options) {
  const canGo = await routerInterceptor(options)
  if (canGo) originalNavigateTo.call(this, options)
}

uni.redirectTo = async function(options) {
  const canGo = await routerInterceptor(options)
  if (canGo) originalRedirectTo.call(this, options)
}

// 拦截 tabBar
uni.switchTab = async function(options) {
  const canGo = await routerInterceptor(options)
  if (canGo) originalSwitchTab.call(this, options)
}

uni.navigateBack = async function(options) {
  originalNavigateBack.call(this, options)
}

使用方法
在 App.vue 引入(必须)

复制代码
<script>
// 引入全局路由拦截
import '@/utils/router.js'

export default {
  onLaunch() {
    console.log('小程序启动')
  }
}
</script>
相关推荐
程序鉴定师1 天前
西安App开发推荐与业界认可的优秀实践
大数据·小程序
阳光先做1 天前
uniapp打包鸿蒙安装包问题
uni-app
纤纡.1 天前
HarmonyOS 鸿蒙 ArkTS 实战:从零开发生肖集卡抽奖小程序
华为·小程序·harmonyos·deveco studio
我是伪码农1 天前
小程序26-50
小程序
码海扬帆:前端探索之旅2 天前
深度定制 uni-combox:新增功能详解与实战指南
前端·vue.js·uni-app
计算机学姐2 天前
基于微信小程序的图书馆座位预约系统【uniapp+springboot+vue】
vue.js·spring boot·微信小程序·小程序·java-ee·uni-app·intellij-idea
中犇科技2 天前
电商app源码系统推荐|开源 uniapp 商城系统
uni-app
焦糖玛奇朵婷2 天前
健身房预约小程序开发、设计
java·大数据·服务器·前端·小程序
海水冷却2 天前
uniapp 实现直播功能的完整方案与实战指南
uni-app
wuxianda10302 天前
Object-C/Swift/UniApp项目苹果商店上架3天极速解决方案汇报总结
ios·uni-app·objective-c·cocoa·苹果上架