问题
1、调用wx.login后code传给后端需要保存session_token,但是这个session_token无法设置缓存时间,有效时间和用户操作有关,只能通过前端wx.checksession判断有效性.
2、用户信息、手机号等授权接口解密都需要使用这个session_token。
解决方式
取消原先系统的登录验证方式,直接用checksession方法检查用户登录状态
前端直接用wx.checksession作为判断用户登录状态的方法,session无效再调用wx.login更新后端数据
流程
wx.checksession
->ok->判断用户已登录
->无效->执行->wx.login->用返回的code传给后端更新session_token
app.js
wx.checkSession().then(
()=>{},
()=>{
return utils.authLogin()
}).finally(()=>{
this.getUserInfo().then(res=>{
this.globalData.userInfo = res.data;
if(res.data.is_registered == 0){
wx.navigateTo({
url: '/pages/getUserProfile/getUserProfile'
})
}
})
})
utils.js
module.exports = {
formatTime,
request: function(params){
return new Promise((resolve, reject)=>{
wx.request({
...params,
dataType: 'json',
header: {
Authorization: 'Bearer ' + wx.getStorageSync('authToken')
},
success:res=>{
if(res.data.code == 4003){
wx.navigateTo({
url: '/pages/index/forbidden'
})
}
if(res.data.code == 403){
this.authLogin()
}
resolve(res.data)
},
error:error=>{
reject(error)
}
})
})
},
login: function(){
return new Promise((resolve, reject)=>{
wx.login({
success:res=>{
resolve(res)
},
error:error=>{
reject(error)
}
})
})
},
authLogin: function(){
this.login().then(res=>{
this.request({
url: 'http://www.pp.com/api/user/login',
data: {
code: res.code
}
}).then(res=>{
wx.setStorageSync('authToken', res.data.token)
}).catch(e=>{
})
})
}
}