大家好,我是浩冉然,今天给大家分享通过缓存的方式,头像和昵称授权,并修改头像和昵称再覆盖存入缓存中的文章
首先大家都知道小程序如果要使用微信使用用户的头像和昵称,就要通过授权获取用户信息,并存入缓存(方便,下次打开小程序直接读取微信缓存的数据,也就是直接读取个人的头像和昵称)
通过存入缓存授权获取用户信息时这样用的(方式不止一种,这里只说我用的):
.wxml
<button class="gotoshouquan" bindtap="getInfo">授权登录</button>
.js
// 授权登录
getInfo(){
wx.getUserProfile({
desc:'获取用户必要的信息',
success(res){
console.log(res)
app.globalData.userInfo = res.userInfo //存入全局变量的js中的userInfo,方便页面直接读值
wx.setStorageSync('userInfo', res.userInfo)//键值对
wx.navigateBack({
delta: 1,
})
}
})
},
已经获得了头像昵称后,如果我想去改昵称和头像怎么办?逻辑是这样的:直接删掉缓存键名userInfo的值,然后再将自己想传入的头像(这里是url地址,也能是存入数据库的云地址)和昵称赋值给微信缓存的键名userInfo,也可以直接赋值,直接覆盖旧值就行,因为wx.setStorageSync这个api允许这样直接覆盖
到了这里,我想给大家看一下开发文档这个wx.setStorageSync的官方用法
try {
wx.setStorageSync('key', 'value')
} catch (e) { }
将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。
我当时在想,只能存入一个value,但头像和昵称是两个值,而且我还需要在key下分别加头像和昵称的字段名,于是就尝试能否存入一个object对象,结果是可以的
比如
.js
genghuan(){
wx.removeStorage({ //先移除缓存,再存入
key: 'userInfo',
success (res) {
wx.setStorageSync('userInfo', { //以对象的方式存入userInfo
nickName:that.data.inputValue, //这个是自己上传更改后的昵称
avatarUrl:that.data.cloudImgList[0] //这个是自己上传的头像
})
app.globalData.userInfo = wx.getStorageSync('userInfo') //将更新后的头像和昵称同步到全局变量的userInfo中去
}
})
},
然后缓存中的userInfo已经更换成最新的头像和昵称,全局变量的userInfo也更新成最新的头像和昵称了,最后就大功告成!!