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代码报错

bug图片


更多关于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 接口,传入 appidsecretcode 等参数来获取 openidsession_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 失败' });
      }
    });
回到顶部