uni-app 使用官网方法获取用户openid时报错 [uni-id-users.password.read] 权限校验未通过

uni-app 使用官网方法获取用户openid时报错 [uni-id-users.password.read] 权限校验未通过

项目信息 详情
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 22631.3527
HBuilderX类型 正式
HBuilderX版本号 4.14
第三方开发者工具版本号 1.06.2402040 Stable
基础库版本号 3.4.3
项目创建方式 HBuilderX

bug描述:

uniapp vue3 微信小程序项目,使用了unicloud作为云开发: 在使用官网给的方法获取用户的openid时,报错[uni-id-users.password.read]权限校验未通过,试过password的字段权限加上read为true不行。 也试了过滤掉password还是不行,请问应该如何获取用户的openid?

附件图片中是官网给的方法; 下面是我的按照官网写的代码

let openid = ‘’ const getOpenId = async () => { const uid = uniCloud.getCurrentUserInfo().uid const appId = ‘__UNI_EEB4FF7’ const wxPlatform = ‘mp’

const getUserRes = await db.collection('uni-id-users').doc(uid).get()

const userRecord = getUserRes.data[0]
if (!userRecord) {
	throw new Error('未匹配到此用户')
}
const wxOpenid = userRecord.wx_openid || {}
openid = wxOpenid[wxPlatform + '_' + appId] || wxOpenid[wxPlatform]

} getOpenId() console.log(openid)


### 操作步骤:
登录后,直接在首页请求即可

### 预期结果:
能否得到openid

### 实际结果:

const getUserRes = await db.collection(‘uni-id-users’).doc(uid).get() 会报错[uni-id-users.password.read]权限校验未通过


更多关于uni-app 使用官网方法获取用户openid时报错 [uni-id-users.password.read] 权限校验未通过的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

问题解决了吗?

更多关于uni-app 使用官网方法获取用户openid时报错 [uni-id-users.password.read] 权限校验未通过的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-app 获取用户 openid 时,出现 [uni-id-users.password.read] 权限校验未通过 的错误,通常是因为当前用户没有权限读取 uni-id-users 集合中的 password 字段。以下是可能的解决方案:

1. 检查用户权限

确保当前登录的用户拥有读取 uni-id-users 集合中 password 字段的权限。默认情况下,password 字段是敏感信息,只有管理员或特定权限的用户才能访问。

2. 修改权限配置

如果你确定需要读取 password 字段,可以通过以下步骤修改权限配置:

2.1 进入 uniCloud 控制台

  1. 登录 uniCloud 控制台
  2. 找到你的项目,进入 uni-id 模块。

2.2 修改集合权限

  1. uni-id 模块中,找到 uni-id-users 集合。
  2. 检查或修改该集合的权限设置,确保当前用户有权限读取 password 字段。

3. 使用云函数获取 openid

如果你不需要直接读取 password 字段,可以通过云函数来获取用户的 openid。以下是一个简单的示例:

3.1 创建云函数

  1. uniCloud 项目中创建一个新的云函数,例如 getOpenId
  2. 在云函数中编写以下代码:
'use strict';
const uniID = require('uni-id');
exports.main = async (event, context) => {
  const {
    uid
  } = event;
  const userInfo = await uniID.getUserInfo({
    uid
  });
  if (userInfo.code) {
    return userInfo;
  }
  return {
    code: 0,
    openid: userInfo.userInfo.openid
  };
};

3.2 在客户端调用云函数

在 uni-app 的页面或组件中调用这个云函数:

uniCloud.callFunction({
  name: 'getOpenId',
  data: {
    uid: uni.getStorageSync('uni_id_uid') // 获取当前用户的 uid
  },
  success(res) {
    console.log('openid:', res.result.openid);
  },
  fail(err) {
    console.error('获取 openid 失败:', err);
  }
});

4. 检查 uni-id 配置

确保 uni-id 的配置正确,特别是 password 字段的权限设置。你可以参考 uni-id 文档 进行配置。

5. 使用其他方式获取 openid

如果不需要直接读取 password 字段,可以考虑使用其他方式获取 openid,例如通过 uni.login 获取 code,然后通过 uniClouduniID.login 方法获取 openid

uni.login({
  provider: 'weixin',
  success(res) {
    const code = res.code;
    uniCloud.callFunction({
      name: 'uniIDLogin',
      data: {
        code
      },
      success(res) {
        console.log('openid:', res.result.openid);
      },
      fail(err) {
        console.error('获取 openid 失败:', err);
      }
    });
  }
});
回到顶部