小程序登录、用户信息样关接口又双叕变了。
https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801
几家悲伤几家愁。。。
微信的一小步,人猿的一大步。。。
没办法,改吧。。。
翻出以前小程序这部分的代码,惊喜地发现,只需要三行代码,就能平滑过渡;
感谢我以前看似丑陋却很省事的登录代码逻辑!!!
登录逻辑如下:
1、判断库里有用户的信息没有,没有,则wx.navigateTo一个专门的授权页面:auth
2、授权成功后获得userInfo,保存到库里;
auth页代码修改如下:
auth.wxml:
修改一行代码
<button style='margin:15px;font-size:16px' type='primary' size="mini" bindtap='getUserProfile'>授权微信头像和昵称</button>
auth.js:
修改两行代码
//原wx.getUserInfo接口
getUserInfo: function (e) {
let userInfo = e.detail.userInfo
if (userInfo) this.onSaveUserInfo(userInfo)
},
//新增wx.getUserProfile接口
getUserProfile: function (e) {
wx.getUserProfile({
desc: '业务需要',
success: res => this.onSaveUserInfo(res.userInfo)
})
},
//保存userInfo到DB
onSaveUserInfo:function(userInfo){
console.log(app.globalData.userInfo = userInfo)
db.collection('user')
.where({ _id: this.openid })
.count()
.then(res => {
if (res.total > 0) {
//doc.update
db.collection('user').doc(this.openid).update({
data: userInfo
}).then(res => console.log(res))
} else {
//doc.add
db.collection('user').doc(this.openid).add({
data: userInfo
}).then(res => console.log(res))
}
})
wx.navigateBack()
},
以下是判断用户信息是否存在的代码:
xxxx.js:
onSubmit:async function () {
if (await app.hasUserInfo()) { } else return
//其他代码
},
app.js:
hasUserInfo: async function () {
if (this.globalData.userInfo && this.globalData.userInfo.nickName && this.globalData.userInfo.avatarUrl) return true
let res = await wx.cloud.database().collection('user').doc(this.openid).get().catch(err => console.log(err))
if (res && res.data && res.data.nickName && res.data.avatarUrl) {
this.globalData.userInfo = res.data
return true
} else {
wx.navigateTo({ url: '/base/auth/auth' })
return false
}
},
至于用户更换了头像昵称后怎么更新数据库,我们一直以来的方法如下:
1、留给用户手动授权的入口,用户更换头像后,发现自己的头像不显示,则需要手动授权刷新userInfo;
2、一般会在这个页面:我的--个人信息--授权微信头像和昵称,用户点击后,wx.navigateTo到授权页。
接下来就是重复工作了,给每个小程序复制替换以上代码,不到半小时,所有小程序改完。。。