uni-app中uniIdRouter配置在微信小程序中无效,H5中有效

发布于 1周前 作者 vueper 来自 Uni-App

uni-app中uniIdRouter配置在微信小程序中无效,H5中有效

开发环境 版本号 项目创建方式
Windows Windows 11 家庭中文版22621.2715 HBuilderX

示例代码:

"uniIdRouter": {  
    "loginPage": "uni_modules/uni-id-pages/pages/login/login-withoutpwd",  
    "needLogin": [  
        "pages/chat/chat",   
        "pages/ucenter/ucenter",   
        "uni_modules/uni-id-pages/pages/userinfo/userinfo"  
    ],   
    "resToLogin": true  
}

操作步骤:

预期结果:

没登录自动进入登录页面

实际结果:

没有进入登录页面

bug描述:

uniIdRouter配置在微信小程序中无效,H5中有效


3 回复

注意:uniIdRouter底层使用navigateTo、redirectTo、reLaunch、switchTab的拦截器进行页面跳转拦截,不会拦截进入首页,web端和app端会拦截原生tabbar点击,其他端不会拦截原生tabbar点击。


onload对其享数据拦截,不符合先跳到指定页。router作为辅助

uni-app 中使用 uniIdRouter 进行路由权限控制时,可能会遇到在微信小程序中无效但在 H5 中有效的情况。这通常是由于微信小程序的环境限制或配置问题导致的。以下是一些可能的原因和解决方案:

1. 检查 uniIdRouter 的配置

确保 uniIdRouter 的配置正确,并且适用于微信小程序。例如:

// main.js
import uniIdRouter from '@/uni_modules/uni-id-pages/common/uniIdRouter.js'

Vue.prototype.$uniIdRouter = uniIdRouter

uniIdRouter.beforeEach((to, from, next) => {
  // 权限控制逻辑
  if (to.requiresAuth && !uni.getStorageSync('uni_id_token')) {
    next({
      path: '/pages/login/login'
    })
  } else {
    next()
  }
})

2. 微信小程序的环境限制

微信小程序的环境与 H5 不同,可能存在一些限制。例如:

  • 路由跳转:微信小程序的路由跳转是通过 wx.navigateTo 等 API 实现的,而不是直接修改 URL。因此,uniIdRouter 的权限控制逻辑可能需要适配微信小程序的 API。
  • 存储机制:微信小程序使用的是 wx.setStorageSyncwx.getStorageSync 来进行本地存储,确保你的权限判断逻辑使用的是这些 API。

3. 检查微信小程序的 AppID 和权限配置

确保微信小程序的 AppID 配置正确,并且在微信开发者工具中开启了相关权限(如用户信息获取、存储等)。

4. 调试和日志输出

在微信小程序中使用 console.log 输出调试信息,检查 uniIdRouter 的逻辑是否正常执行。例如:

uniIdRouter.beforeEach((to, from, next) => {
  console.log('路由跳转:', to, from)
  if (to.requiresAuth && !uni.getStorageSync('uni_id_token')) {
    console.log('未登录,跳转到登录页')
    next({
      path: '/pages/login/login'
    })
  } else {
    console.log('已登录,继续跳转')
    next()
  }
})

5. 使用 uni-app 官方提供的解决方案

uni-app 官方提供了一些解决方案和插件,可以帮助你在微信小程序中实现路由权限控制。例如,使用 uni-simple-router 插件:

// main.js
import Vue from 'vue'
import App from './App'
import { RouterMount } from 'uni-simple-router'
import router from './router'

Vue.config.productionTip = false

App.mpType = 'app'

const app = new Vue({
  ...App
})

//v1.3.5起 H5端 你应该去除原有的app.$mount();使用路由自带的渲染方式
// #ifdef H5
  RouterMount(app, router, '#app')
// #endif

// #ifndef H5
  app.$mount(); //为了兼容小程序及app端必须这样写才有效果
// #endif
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!