uni-app 官网文档上写的获取open-id的方法实际使用会提示权限校验未通过
uni-app 官网文档上写的获取open-id的方法实际使用会提示权限校验未通过
产品分类:
uniCloud/App
示例代码:
const uid = 'xx'
const appId = '__UNI_xxx'
const wxPlatform = 'mp' // mp:小程序,h5:公众号,web:web页面,app:App微信登录
const db = uniCloud.database()
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 || {}
const openid = wxOpenid[wxPlatform + '_' + appId] || wxOpenid[wxPlatform]
操作步骤:
首先使用官网的方法尝试报错,password没有权限,然后就想着不查password,下述语句又报权限校验未通过
db.collection("uni-id-users").doc('$cloudEnv_uid').field('wx_openid').get().then((res) => {
// res 为数据库查询结果
console.log(res)
}).catch((e) => {
console.log(e)
});
预期结果:
按道理应该获取到数据
实际结果:
Error: 权限校验未通过,请参考文档:https://uniapp.dcloud.net.cn/uniCloud/schema.html#handler-permission-error
bug描述:
通过官网示例通过id获取微信小程序open_id代码报错
更多关于uni-app 官网文档上写的获取open-id的方法实际使用会提示权限校验未通过的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
放在云函数里面不是很简单吗?
const db = uniCloud.database();
const uniID = require(‘uni-id-common’)
const uniIDIns = uniID.createInstance({ // 创建uni-id实例
context: ctx
})
const auth = await uniIDIns.checkToken(ctx.data);
const user = await db.collection(‘uni-id-users’).doc(auth.uid).get();
const wx_openid = user.data.wx_openid
更多关于uni-app 官网文档上写的获取open-id的方法实际使用会提示权限校验未通过的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 中获取用户的 openid 时,如果遇到“权限校验未通过”的错误,通常是由于以下几种原因导致的:
1. 未正确配置 AppID 和 AppSecret
- 确保在微信开发者工具或微信公众平台中正确配置了 AppID 和 AppSecret。
- 在
manifest.json文件中,正确填写了微信小程序的 AppID。
2. 未正确调用微信登录 API
- 在获取
openid之前,必须先调用wx.login获取code,然后将code发送到服务器端,服务器端再通过微信接口获取openid。 - 示例代码:
uni.login({ provider: 'weixin', success: function (loginRes) { const code = loginRes.code; // 将 code 发送到服务器端 uni.request({ url: 'https://your-server-url.com/getOpenId', method: 'POST', data: { code: code }, success: function (res) { const openid = res.data.openid; console.log('openid:', openid); }, fail: function (err) { console.error('获取 openid 失败:', err); } }); }, fail: function (err) { console.error('登录失败:', err); } });
3. 服务器端未正确处理 code
- 服务器端接收到
code后,需要调用微信的https://api.weixin.qq.com/sns/jscode2session接口,传入appid、secret、code等参数来获取openid和session_key。 - 示例代码(Node.js):
const axios = require('axios'); app.post('/getOpenId', async (req, res) => { const code = req.body.code; const appid = 'your-appid'; const secret = 'your-secret'; const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`; try { const response = await axios.get(url); const openid = response.data.openid; res.json({ openid: openid }); } catch (error) { res.status(500).json({ error: '获取 openid 失败' }); } });

