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 生产微信小程序菜单获取问题
编译工程后导入微信开发者工具,模拟器正常,真机调试有问题
- 日志发现uniCloud.getCurrentUserInfo()在模拟器正常,真机得不到值
- opendb-admin-menus.schema.json配置已更改
"permission": { "read": true, "create": false, "update": false, "delete": false } - 小程序端加入了白名单域名,uni-config-center也做了配置。
Unicloud admin 生产微信小程序菜单获取问题
更多关于uni-app Unicloud admin 生成微信小程序菜单获取问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
5 回复
先体验模式在手机上打开调试看看
我想问您一下,微信获取角色、权限需要别的处理吗还,还是直接可以用啊?
回复 yanghang: 角色权限这些跟平台没什么关系,直接用就行
问题核心在于真机环境下 uniCloud.getCurrentUserInfo() 无法获取用户信息,导致权限过滤逻辑失效。
原因分析:
- 登录状态未同步:小程序真机环境与模拟器的登录状态可能存在差异。
uniCloud.getCurrentUserInfo()依赖有效的登录态,真机可能因未登录或 token 失效返回空值。 - 网络请求限制:真机网络环境复杂,可能因域名校验、HTTPS 证书等问题导致云函数调用失败。
- 权限配置问题:虽然已调整
opendb-admin-menus表的权限,但菜单数据查询仍可能受云函数或数据库权限规则影响。
解决方案:
- 检查登录流程:确保真机环境下已完成
uni-id登录,并确认uni-id的 token 有效。可在App.vue的onLaunch中调用uniCloud.getCurrentUserInfo()测试登录态。 - 验证网络配置:确认小程序后台配置的
request合法域名包含云函数域名(通常是*.bspapp.com或自定义域名),且云函数已部署到生产环境。 - 调整菜单获取逻辑:在
getUserMenu函数中增加容错处理,当uniCloud.getCurrentUserInfo()返回空时,可降级返回静态菜单或跳转登录页:const userInfo = uniCloud.getCurrentUserInfo() if (!userInfo || !userInfo.role) { // 真机未登录时,返回空菜单或跳转登录 return buildMenus([]) }


