微信小程序更新接口wx.getUserProfile后不返回scope.userInfo权限
小程序授权 scope 列表参见官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html
本文要讲的 scope.userInfo 来源于 wx.getUserInfo,参考官方文档:wx.getUserInfo
而这个 getUserInfo 在本次更新 wx.getUserProfile 后就无法获取 scope.userInfo,目前开发版 & 体验版已对齐 getUserInfo 匿名表现,正式版将于 4月13日 正式对齐 getUserInfo 匿名表现。请开发者使用 getUserProfile 获取用户信息。小程序登录、用户信息相关接口调整说明
针对scope.userInfo将做如下调整:
若开发者调用wx.authorize接口请求scope.userInfo授权,用户侧不会触发授权弹框,直接返回授权成功
若开发者调用wx.getSetting接口请求用户的授权状态,会直接读取到scope.userInfo为true
也就是说 scope.userInfo 不能再作为登录状态的判断条件了。
参考调试代码
onShow: function() { wx.getSetting({ success: function(t) { console.log('- auth/getSetting -', t); var a = t.authSetting["scope.userInfo"]; console.log('- auth/scope -', a); //在未授权的情况下,页面这里直接返回 true } }); },
那如何判断用户是否已经授权登录了呢?
原来可以通过 wx.getSetting 获取到 authSetting["scope.userInfo"] 来判断用户是否已授权,大概代码如下
onLoad: function () { var that = this; // 查看是否授权 wx.getSetting({ success: function (res) { if (res.authSetting['scope.userInfo']) { wx.getUserInfo({ success: function (res) { //从数据库获取用户信息 that.queryUsreInfo(); //用户已经授权过 wx.switchTab({ url: 'pages/auth' }) } }); } } }) },
现在已经用不上 scope.userinfo 了,wx.getUserProfile 最大的区别是完全与 wx.login 无关了,将登录获得openid和授权用户信息完全分开,因此我们可以通过后端判断返回确认用户是否授权过,大概流程是:
1、后端判断数据库里是否包含用户的信息,有则已授权正常登录;没有则 wx.navigateTo 到授权页面去授权。
2、授权成功后,将用户信息写入缓存 setCache("userinfo", app.userInfo)
wx.getUserProfile 相关参考文档
微信小程序更新接口wx.getUserProfile涉及小程序登录/用户信息相关接口调整说明
微信小程序更新接口wx.getUserProfile相关解读
微信小程序更新接口wx.getUserProfile后获取用户昵称变成[微信用户]的解决方法
微信小程序更新接口wx.getUserProfile后不返回scope.userInfo权限
微信小程序更新接口wx.getUserProfile后获取用户资料及授权登陆判断的方案