小程序授权登录后获取用户信息失败怎么办?

シ梓宸 阅读 75

大家好,我正在开发小程序的授权登录功能,用户同意授权后一直拿不到用户信息,卡在获取用户资料这一步了。

我按照文档写了一个授权按钮:


<button open-type="getUserInfo" bindgetuserinfo="handleUserInfo">
获取微信信息
</button>

然后在handleUserInfo函数里调用了wx.getUserProfile,但控制台显示”getUserProfile:fail 用户未授权”。奇怪的是用户明明点了同意按钮啊,我尝试过清除小程序缓存再试还是不行。

检查过小程序后台的权限声明,scope.userLocation和scope.userInfo都填了。用微信开发者工具测试时,模拟用户同意授权后,回调函数里的e.detail.userInfo一直是空对象。这是哪里出问题了?

我来解答 赞 8 收藏
二维码
手机扫码查看
2 条解答
姗姗 Dev
你这个问题主要是因为微信小程序的授权机制更新了,现在要用 wx.getUserProfile 来获取用户信息,但它的调用时机很关键。你代码里的问题出在 open-type="getUserInfo" 这个属性上,这个属性其实已经被废弃了,它跟 wx.getUserProfile 不兼容。

正确的做法是直接去掉 open-type="getUserInfo"bindgetuserinfo,改用一个普通的按钮,在点击事件里直接调用 wx.getUserProfile。下面是修改后的代码示例:

Page({
data: {
userInfo: null
},
getUserProfile() {
wx.getUserProfile({
desc: '用于完善会员资料', // 这个描述必须写,不然会报错
success: (res) => {
console.log('用户信息:', res.userInfo);
this.setData({
userInfo: res.userInfo
});
// 如果需要的话可以把用户信息缓存起来
wx.setStorageSync('userInfo', res.userInfo);
},
fail: (err) => {
console.error('获取用户信息失败:', err);
}
});
}
});


对应的 WXML 改成这样:

<button bindtap="getUserProfile">获取微信信息</button>


另外,注意一下几点:
1. 确保你的基础库版本是 2.10.4 或以上,否则 wx.getUserProfile 无法使用。
2. 后台的权限声明配置没问题的话就不用再改了,重点是前端代码的调用方式。
3. 用户点了同意后,返回的数据一定要及时处理,别忘了异常情况的兜底逻辑。

如果你按照这个改还是不行,可能是基础库没切换对,或者开发者工具的模拟器有问题,建议真机调试一下。
点赞
2026-02-15 12:03
皇甫东润
你这个问题我也踩过坑,可以试试这样改。

微信官方已经逐步废弃了 wx.getUserInfoopen-type="getUserInfo" 的方式获取用户信息。现在推荐使用 wx.getUserProfile,但有几个点要注意:

1. **授权按钮不要用 open-type="getUserInfo"**,这个已经不推荐了,直接用普通按钮触发:
<button bindtap="getUserProfile">获取用户信息</button>


2. 在 getUserProfile 函数里调用 wx.getUserProfile,记得带上 desc 参数(必须写):
getUserProfile() {
wx.getUserProfile({
desc: '用于完善资料',
success: (res) => {
console.log('用户信息:', res.userInfo);
// 这里 res.userInfo 应该有数据了
},
fail: (err) => {
console.error('获取用户信息失败', err);
}
});
}


3. 还有关键的一点是:**用户必须主动点击按钮触发授权**,不能在页面 onLoad 里自动调用,否则会被微信拦截。

如果你用的是新版开发者工具,可能默认是“不模拟授权”状态,记得在工具里勾选“模拟用户授权”看看效果。

最后,wx.getUserInfo + open-type="getUserInfo" 这套组合在很多场景已经不可用了,特别是基础库版本高的情况下。建议你直接改用 wx.getUserProfile,别混着用了。

试试这些步骤,应该能拿到用户信息了。如果还不行,可以贴下你调用的代码,我再帮你看看。
点赞 7
2026-02-04 12:08