uni-app uniCloud.getCurrentUserInfo().role 获取角色不全

uni-app uniCloud.getCurrentUserInfo().role 获取角色不全

示例代码:

onLoad() {
    this.role = uniCloud.getCurrentUserInfo().role;
    console.log("onLoad:role", this.role, uniCloud.getCurrentUserInfo());
}

实际数据库:

"role": [
    "counsellor",
    "L5"
],

操作步骤:

每次启动小程序进入页面时,调用onLoad,获得调试信息:

{
    "onLoad:role": ["counsellor", {"ob": "Observer"}],
    "uid": "65f98a10a7c432936b30e275",
    "role": ["counsellor"],
    "permission": [],
    "uniIdVersion": "1.0.16",
    "tokenExpired": 1716106344000
}

预期结果:

应该是:

["counsellor", "L5", {"ob": "Observer"}]

少了"L5"

实际结果:

每次启动小程序进入页面时,调用onLoad,获得调试信息:

{
    "onLoad:role": ["counsellor", {"ob": "Observer"}],
    "uid": "65f98a10a7c432936b30e275",
    "role": ["counsellor"],
    "permission": [],
    "uniIdVersion": "1.0.16",
    "tokenExpired": 1716106344000
}

bug描述:

使用在微信小程序端调用uniCloud.getCurrentUserInfo().role获取当前用户的role信息,每次只返回role数组只有一个值,是用户的第一个角色,请问这是什么情况?


更多关于uni-app uniCloud.getCurrentUserInfo().role 获取角色不全的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

奇怪,换个另外的用户仍旧通过onloda调用这个函数,居然还给出错误结果:
数据库: { …
“nickname”: “风来”,
“role”: [
“student”,
“L4”
],
}
调用结果: onLoad:role (2) [“student”, “L1”, ob: Observer] {uid: “65f7f1ef21821b6d2beb9f66”, role: Array(2), permission: Array(0), uniIdVersion: “1.0.16”, tokenExpired: 1715953277000}
明明是L4,返回L1,这啥问题?

更多关于uni-app uniCloud.getCurrentUserInfo().role 获取角色不全的实战教程也可以访问 https://www.itying.com/category-93-b0.html


注意getCurrentUserInfo获取的是token内缓存的角色信息,你如果修改了用户的角色权限,需要他重新登录或者自动刷新了token才会取到新的

在使用 uniCloud.getCurrentUserInfo() 获取用户信息时,可能会遇到 role 字段不全的问题。这可能是因为用户角色信息的获取方式或权限设置存在问题。以下是一些可能的原因和解决方案:

1. 检查 uni-id 配置

确保你的 uni-id 配置正确,特别是角色权限部分。在 uni-id 的配置文件中,检查 role 的定义和分配是否正确。

2. 用户角色分配

检查用户是否被正确分配了角色。可以通过 uni-id 的管理后台或直接操作数据库来确认用户的角色信息。

3. 获取用户信息的权限

确保调用 uniCloud.getCurrentUserInfo() 的云函数或云对象具有足够的权限来获取完整的用户信息。如果权限不足,可能会导致角色信息不全。

4. 自定义获取用户信息

如果默认的 getCurrentUserInfo 无法获取完整的角色信息,可以考虑自定义一个云函数来获取用户信息。例如:

// 自定义云函数获取用户信息
exports.main = async (event, context) => {
  const uniID = require('uni-id')
  const { uid } = event

  // 获取用户信息
  const userInfo = await uniID.getUserInfo({
    uid
  })

  // 返回用户信息
  return userInfo
}

然后在客户端调用这个云函数来获取完整的用户信息。

5. 检查客户端代码

确保客户端代码正确调用 uniCloud.getCurrentUserInfo(),并且处理返回的结果时没有遗漏 role 字段。

uniCloud.getCurrentUserInfo().then(userInfo => {
  console.log(userInfo.role) // 检查 role 字段
}).catch(err => {
  console.error(err)
})

6. 更新 uniCloud SDK

确保你使用的 uniCloud SDK 是最新版本,旧版本可能存在一些已知的问题。

7. 调试和日志

在云函数中添加日志,检查 getCurrentUserInfo 返回的数据是否包含完整的角色信息。如果发现数据不全,可以进一步排查问题所在。

exports.main = async (event, context) => {
  const userInfo = await uniCloud.getCurrentUserInfo()
  console.log(userInfo) // 打印用户信息
  return userInfo
}
回到顶部