微信小程序用户登录信息过期处理
由于小程序对获取用户信息的新规定,获取用户信息必须通过一个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 = thisthis.logged = false// 调用云函数if (!this.logged) {wx.cloud.callFunction({name: 'login',data: {},success: res => {console.log('[云函数] [login] user openid: ', res.result.openid)this.logged = truewx.setStorageSync('openid', res.result.openid)wx.getUserInfo({success: res => {const myavatarUrl = res.userInfo.avatarUrlconst mynickName = res.userInfo.nickNameconst mymanager = falsewx.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()}}})}}