微信小程序用户登录信息过期处理
由于小程序对获取用户信息的新规定,获取用户信息必须通过一个button调出获取窗口,然而用户的token会过期,而本地存在的缓存可能会让用户误以为自己仍处于登录状态,但实际使用时因为用户此时登录信息已经过期并未有openid导致信息渲染不完全从而无法成功使用小程序。
问题的麻烦就在于此时用户对小程序其实是已经授权的,我们无法通过院线的授权登录按钮实现刷新登录信息,可是我们总不能让用户每次都把小程序删除后重新登录小程序,又麻烦用户体验也差。
我的解决办法是通过ui优化重写写一个提示用户重新授权的button,并在button的方法调用中无论如何将用户的登录信息改为false,从而实现重新登录。
效果如图:
用户点击登录后即可重新实现获取用户信息,刷新页面,并无需唤起授权窗口。
wxml:
<view class="text-center text-orange">
<text class="text-center text-orange">登录信息过期时请重新授权</text>
<button class="text-blue cu-btn" open-type="getUserInfo" bindgetuserinfo="bindgetuserinfo">登录</button>
<text>哦(*╹▽╹*)</text></view>
js:
bindgetuserinfo: function () {
self = this
this.logged = false
// 调用云函数
if (!this.logged) {
wx.cloud.callFunction({
name: 'login',
data: {},
success: res => {
console.log('[云函数] [login] user openid: ', res.result.openid)
this.logged = true
wx.setStorageSync('openid', res.result.openid)
wx.getUserInfo({
success: res => {
const myavatarUrl = res.userInfo.avatarUrl
const mynickName = res.userInfo.nickName
const mymanager = false
wx.cloud.callFunction({
name: 'addUser',
data: {
avatarUrl: myavatarUrl,
manager: mymanager,
nickName: mynickName,
openid: wx.getStorageSync("openid")
},
success: function (res) {
console.log(res)
self.onLoad();
self.onShow();
},
fail: function (res) {
console.log(res)
if (getCurrentPages().length != 0) {
//刷新当前页面的数据
getCurrentPages()[getCurrentPages().length - 1].onLoad()
}
}
})
}
})
},
fail: err => {
console.error('[云函数] [login] 调用失败', err)
if (getCurrentPages().length != 0) {
//刷新当前页面的数据
getCurrentPages()[getCurrentPages().length - 1].onLoad()
}
}
})
}
}
7311



被折叠的 条评论
为什么被折叠?



