前言:自2021.4.13日后,微信小程序API做了调整,之前用的getUserInfo目前无法直接获取用户信息了,比如昵称头像等等,想要用户授权获取用户信息,就得将getUserInfo改成getUserProfile接口。
目前想到的解决办法是把用户授权过的信息缓存起来,要么在小程序本地缓存要么利用后台接口缓存,在这里选择的是接口缓存的方法,不过由于我水平有限,在这里的后台接口是小程序中云开发中的云函数。
场景:文章点赞功能,在点赞前需要获取用户的头像等信息;
步骤1:点击点赞事件,先判断用户是否已经授权,如果没有授权就跳转到授权页面,
onLoad:async function (options) {
await app.hasUserInfo()
let id = options.id;
this.getDetail(id)
},
clickHits() {
if(app.globalData.userInfo) { //app.globalData.userInfo通过onLoad里面的app.hasUserInfo()获取到,此方法必须先于点击事件执行
console.log('已经授权过了')
} else {
wx.navigateTo({
url: '/pages/login/login',
})
}
},
app.js中app.hasUserInfo的代码
async hasUserInfo() {
if (this.globalData.userInfo && this.globalData.userInfo.nickName && this.globalData.userInfo.avatarUrl) return true;
var res = await wx.cloud.callFunction({
name:'getuser'})
if(res.result.code == 200) {
this.globalData.userInfo = res.result.data[0]
return true;
} else {
return false
}
}
步骤二:按允许授权,
此时在云数据库中保存了用户的信息:
login.wxml:
<view class="btnGroup">
<button type="primary" bindtap="clickUserProfile">授权登录</button>
<button type="default" bindtap="noUser">暂不授权</button>
</view>
login.js:
//更新的授权操作
clickUserProfile() {
wx.getUserProfile({ //此方法直接利用点击事件触发,不再是之前的open-type
desc: '用户授权',
success: (res) => {
this.savaUserInfo(res.userInfo)//把用户信息保存到云数据库中去
wx.showToast({
title: '授权成功',
})
setTimeout(() => {
wx.navigateBack({
delta: 0,
})
},1500)
}
})
},
savaUserInfo(userInfo) {
app.globalData.userInfo = userInfo;
wx.cloud.callFunction({//这是云函数,调用的是保存用户的方法
name:'saveuser',
data:{
userInfo
}
}).then(res => {
console.log('res===',res)
})
},
备注:此方法涉及到的云函数云数据库需要花点时间去微信官方文档中了解一下,云函数云数据库是方便了那些不会用node.js或者php写接口的技术人员,感兴趣的可以了解一下。