uni-app Unicloud admin 生成微信小程序菜单获取问题

uni-app Unicloud admin 生成微信小程序菜单获取问题

示例代码:

getUserMenu(menuList) {  
    const {  
        permission,  
        role  
    } = uniCloud.getCurrentUserInfo()  
    console.log('role:', uniCloud.getCurrentUserInfo())  
    console.log(menuList)  
    // 标记叶子节点  
    menuList.map(item => {  
        if (!menuList.some(subMenuItem => subMenuItem.parent_id === item.menu_id)) {  
            item.isLeafNode = true  
        }  
    })  

    // 删除无权限访问的菜单  
    if (!role.includes('admin')) {  
        menuList = menuList.filter(item => {  
            if (item.isLeafNode) {  
                if (item.permission && item.permission.length) {  
                    return item.permission.some(item => permission.indexOf(item) > -1)  
                }  
                return false  
            }  
            return true  
        })  
    }  
    console.log(menuList)  
    return buildMenus(menuList)  
},

操作步骤:

uniCloud admin 基础框架
发行微信小程序

预期结果:

系统管理菜单完好

实际结果:

只有静态功能演示菜单

bug描述:

Unicloud admin 生产微信小程序菜单获取问题

编译工程后导入微信开发者工具,模拟器正常,真机调试有问题

  1. 日志发现uniCloud.getCurrentUserInfo()在模拟器正常,真机得不到值
  2. opendb-admin-menus.schema.json配置已更改
    "permission": {
        "read": true,
        "create": false,
        "update": false,
        "delete": false
    }
    
  3. 小程序端加入了白名单域名,uni-config-center也做了配置。

Unicloud admin 生产微信小程序菜单获取问题

Image 1 Image 2 Image 3


更多关于uni-app Unicloud admin 生成微信小程序菜单获取问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

官方可以帮忙看一下吗?谢谢啦

更多关于uni-app Unicloud admin 生成微信小程序菜单获取问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


先体验模式在手机上打开调试看看

我想问您一下,微信获取角色、权限需要别的处理吗还,还是直接可以用啊?

回复 yanghang: 角色权限这些跟平台没什么关系,直接用就行

问题核心在于真机环境下 uniCloud.getCurrentUserInfo() 无法获取用户信息,导致权限过滤逻辑失效。

原因分析:

  1. 登录状态未同步:小程序真机环境与模拟器的登录状态可能存在差异。uniCloud.getCurrentUserInfo() 依赖有效的登录态,真机可能因未登录或 token 失效返回空值。
  2. 网络请求限制:真机网络环境复杂,可能因域名校验、HTTPS 证书等问题导致云函数调用失败。
  3. 权限配置问题:虽然已调整 opendb-admin-menus 表的权限,但菜单数据查询仍可能受云函数或数据库权限规则影响。

解决方案:

  1. 检查登录流程:确保真机环境下已完成 uni-id 登录,并确认 uni-id 的 token 有效。可在 App.vueonLaunch 中调用 uniCloud.getCurrentUserInfo() 测试登录态。
  2. 验证网络配置:确认小程序后台配置的 request 合法域名包含云函数域名(通常是 *.bspapp.com 或自定义域名),且云函数已部署到生产环境。
  3. 调整菜单获取逻辑:在 getUserMenu 函数中增加容错处理,当 uniCloud.getCurrentUserInfo() 返回空时,可降级返回静态菜单或跳转登录页:
    const userInfo = uniCloud.getCurrentUserInfo()
    if (!userInfo || !userInfo.role) {
      // 真机未登录时,返回空菜单或跳转登录
      return buildMenus([])
    }
回到顶部