小程序授权登录后获取用户信息失败怎么办?
大家好,我正在开发小程序的授权登录功能,用户同意授权后一直拿不到用户信息,卡在获取用户资料这一步了。
我按照文档写了一个授权按钮:
<button open-type="getUserInfo" bindgetuserinfo="handleUserInfo">
获取微信信息
</button>
然后在handleUserInfo函数里调用了wx.getUserProfile,但控制台显示”getUserProfile:fail 用户未授权”。奇怪的是用户明明点了同意按钮啊,我尝试过清除小程序缓存再试还是不行。
检查过小程序后台的权限声明,scope.userLocation和scope.userInfo都填了。用微信开发者工具测试时,模拟用户同意授权后,回调函数里的e.detail.userInfo一直是空对象。这是哪里出问题了?
wx.getUserProfile来获取用户信息,但它的调用时机很关键。你代码里的问题出在open-type="getUserInfo"这个属性上,这个属性其实已经被废弃了,它跟wx.getUserProfile不兼容。正确的做法是直接去掉
open-type="getUserInfo"和bindgetuserinfo,改用一个普通的按钮,在点击事件里直接调用wx.getUserProfile。下面是修改后的代码示例:对应的 WXML 改成这样:
另外,注意一下几点:
1. 确保你的基础库版本是 2.10.4 或以上,否则
wx.getUserProfile无法使用。2. 后台的权限声明配置没问题的话就不用再改了,重点是前端代码的调用方式。
3. 用户点了同意后,返回的数据一定要及时处理,别忘了异常情况的兜底逻辑。
如果你按照这个改还是不行,可能是基础库没切换对,或者开发者工具的模拟器有问题,建议真机调试一下。
微信官方已经逐步废弃了
wx.getUserInfo和open-type="getUserInfo"的方式获取用户信息。现在推荐使用wx.getUserProfile,但有几个点要注意:1. **授权按钮不要用 open-type="getUserInfo"**,这个已经不推荐了,直接用普通按钮触发:
2. 在
getUserProfile函数里调用wx.getUserProfile,记得带上 desc 参数(必须写):3. 还有关键的一点是:**用户必须主动点击按钮触发授权**,不能在页面 onLoad 里自动调用,否则会被微信拦截。
如果你用的是新版开发者工具,可能默认是“不模拟授权”状态,记得在工具里勾选“模拟用户授权”看看效果。
最后,
wx.getUserInfo+open-type="getUserInfo"这套组合在很多场景已经不可用了,特别是基础库版本高的情况下。建议你直接改用wx.getUserProfile,别混着用了。试试这些步骤,应该能拿到用户信息了。如果还不行,可以贴下你调用的代码,我再帮你看看。