项目场景:
app中嵌套uniapp的商城项目,做uniapp商城的自动登录时出现的bug。
问题描述:
当用户对app卸载重装时,进入uniapp商城中会出现登录失败。
项目描述:
app端调用uniapp的函数进行自动登录(需要获取app端的用户信息,使用app端的用户信息自动都登录),uniapp进行登录请求,获取到登录之后的token,并将其存储到storage中,根据token的有无拦截用户的操作权限的有无(注:没有token啥都干不了)。登录成功回调中设置uni.setStorageSync
代码描述:
提供给app端调用:
window.setAccountToLogin = function(accountInfo) {
const newAccountInfo = JSON.parse(accountInfo)
......
uni.setStorageSync('accountInfo', newAccountInfo)
const params = {
url: '/hyUser/login',
method: 'POST',
data: { ...newAccountInfo },
callBack: (res) => {
//登录成功回调
util.loginSuccess(res.tokenInfo ? res.tokenInfo : res)
},
errCallBack: (err) => {
loginErrHandle(err)
}
}
http.request(params)
......
}
util文件成功回调:
/**
* 登录成功
* @param {Object} loginRes 登录成功返回的数据
* @param {Boolean} isRefreshToken 该次登录是否为刷新token;
*/
const loginSuccess = async(loginRes, isRefreshToken) => {
uni.setStorageSync('isPrivacy', 1)
uni.setStorageSync('hadLogin', true)
uni.setStorageSync('token', loginRes.accessToken)
uni.setStorageSync('loginResult', loginRes) // 保存整个登录数据
const expiresTimeStamp = loginRes.expiresIn * 1000 / 2 + new Date().getTime()
// 缓存token的过期时间
uni.setStorageSync('expiresTimeStamp', expiresTimeStamp)
......
}
原因分析:
个人观点(没有科学依据):设置storage数量条数太多,压力太大有时候设置storage时,设置不上,存不上
解决方案:
直接在app端调用时给加上一个uni.setStorageSync('token',XXX),提前给他加上token
window.setAccountToLogin = function(accountInfo) {
const newAccountInfo = JSON.parse(accountInfo)
......
uni.setStorageSync('accountInfo', newAccountInfo)
const params = {
url: '/hyUser/login',
method: 'POST',
data: { ...newAccountInfo },
callBack: (res) => {
if (res.accessToken) {
uni.setStorageSync('token', res.accessToken)
}
//登录成功回调
util.loginSuccess(res.tokenInfo ? res.tokenInfo : res)
},
errCallBack: (err) => {
loginErrHandle(err)
}
}
http.request(params)
......
}