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>
相关推荐
2501_915106323 小时前
iOS 证书类型及作用说明 账号证书与签名配置的完整解读
android·ios·小程序·https·uni-app·iphone·webview
凡泰AI4 小时前
如何通过小程序多端框架,让一个小程序同时运行在iOS、安卓、鸿蒙以及PC客户端,实现一次开发多端运行的效果
android·ios·小程序
sunywz4 小时前
【从零搭建物联网智能充电桩系统】4、Netty WebSocket 服务:小程序实时推送背后的长连接管理
物联网·websocket·小程序
sunywz6 小时前
【从零搭建物联网智能充电桩系统】系列导读:从硬件到小程序的完整链路
物联网·小程序
资质小秘书16 小时前
2026 年 8 月行业科普:小程序商家需要北京 ICP 许可证吗?
其他·小程序
2501_916008891 天前
移动安全之 APP 加固,保障移动应用安全的重要手段
安全·macos·ios·小程序·uni-app·iphone·xcode
Ai-_Man1 天前
豆包智能体内容批量导出:哪些该存、存成什么、怎么存v
人工智能·ai·小程序·word
黄华SJ520it1 天前
三三复制公排系统:裂变电商新引擎
小程序·系统开发
维双云1 天前
2026做小程序怎么选服务商?SaaS平台与定制公司优缺点分析
小程序
2501_915106321 天前
Python爬虫从零开始:七天掌握HTTP协议、数据解析与反爬策略
android·ios·小程序·https·uni-app·iphone·webview