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
问题解决了吗?
更多关于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 控制台
- 登录 uniCloud 控制台。
- 找到你的项目,进入
uni-id
模块。
2.2 修改集合权限
- 在
uni-id
模块中,找到uni-id-users
集合。 - 检查或修改该集合的权限设置,确保当前用户有权限读取
password
字段。
3. 使用云函数获取 openid
如果你不需要直接读取 password
字段,可以通过云函数来获取用户的 openid
。以下是一个简单的示例:
3.1 创建云函数
- 在
uniCloud
项目中创建一个新的云函数,例如getOpenId
。 - 在云函数中编写以下代码:
'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,然后通过 uniCloud
的 uniID.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);
}
});
}
});