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>
相关推荐
spmcor1 小时前
身份证读卡“无感登录”方案实践:从手动点击到自动检测
uni-app
PedroQue997 小时前
uni-router v1.8.0新增冷启动守卫补执行
前端·uni-app
PedroQue991 天前
uni-router v1.7.0重磅更新:守卫重定向自由掌控
前端·uni-app
一份执念3 天前
uni-app项目 (vue+vite + uni-UI)中引入umd格式JS文件,微信小程序中导入报错处理方案
前端·uni-app·echarts
PedroQue993 天前
V1.6.1性能优化:高频路径提速与代码精简
前端·uni-app
夏碧笔5 天前
uni-app跨端地图实战:用第三方LBS替代微信平台收费服务
uni-app
m0_5261194010 天前
iconfont我修改好颜色,但是在小程序项目是黑色的
小程序
用户69903048487510 天前
try catch使用场景 处理同步代码错误兼容用的
javascript·uni-app
ITKEY_10 天前
uniapp微信开发者工具 更改AppID失败 touristappid
uni-app
2601_9567436810 天前
2026 上海小程序开发甄选:源码、云函数、跨端兼容技术评判
小程序·开发经验·上海