微信小程序更新接口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后获取用户资料及授权登陆判断的方案

人人商城小程序整体修改基于新接口wx.getUserProfile获取用户资料及授权登陆判断

人人商城小程序用户授权登录及数据获取流程分析