7天自動退出的場景:
1、7天沒有點擊按鈕,
2、7天沒有請求服務器
解決思路:
1、登錄成功,記錄當前登錄時間,並存在緩存中,
2、登錄狀態下,點擊按鈕和請求服務器時,
a 先判斷當前時間和登錄時間差是否大於7天,
a.1 大於,則清空用戶登錄緩存信息,提示用戶登錄,
a.2 不大於,則把當前時間作爲新的登錄時間
源碼:
1、在common.js中統一存、取、清登錄時間緩存
const common = {
// 設置用戶登錄時間
setLogintimeInfo: function (time) {
uni.setStorageSync('loginTime', time);
},
getLogintimeInfo: function () {
return uni.getStorageSync('loginTime');
},
removeLogintimeInfo: function () {
uni.removeStorageSync('loginTime');
},
}
export default common;
2、在login.vue頁面登錄成功時,存當前時間
// 記錄登錄成功時間戳
let timestamp = new Date().getTime();
common.setLogintimeInfo(timestamp);
3、在request.js文件中實現7天自動退出方法
// 7天未登錄,自動退出
function autoLogoutFor7Days(){
let loginstamp=common.getLogintimeInfo();
let currentstamp = new Date().getTime();
if(currentstamp-loginstamp>7*24*60*60*1000){//7天內未請求
// 1 清除用戶登錄信息
common.removeGlobalUserInfo();
common.removeLogintimeInfo();
common.removeStorage('location');
// 2 提示去登錄,跳轉到登錄界面
uni.showModal({
content: '您7天內未登錄,請重新登錄',
confirmText: '去登錄',
showCancel:false,
success(res) {
uni.navigateTo({
url:"/pages/login/login",
});
}
});
return true;
}else{//7天內請求了,重置請求時間戳
common.setLogintimeInfo(currentstamp);
return false;
}
}
4、點擊按鈕時,實現7天退出的判斷
function pageNavigator(isUrl, noUrl) {
if (noUrl === undefined) noUrl = ''
if (common.isLogin()) { //用戶名存在
// 查看登錄狀態下,7天內未請求,自動退出
if(autoLogoutFor7Days()){
return
}else{
uni.navigateTo({
url: '/pages/' + isUrl
})
}
} else { //用戶名不存在,傳遞過去登錄之後返回界面的url
uni.navigateTo({
url: '/pages/login/login?navUrl=' + noUrl
})
}
}
5、請求服務器時,實現7天退出的判斷
function setRequest(url, data, showLoad = true, method = 'post', header = {}) {
// 7天內未請求,自動退出排除一些不需要登錄就可以請求的接口
if(url.indexOf("getParkInfo")==-1&&url.indexOf("indexSlideShow")==-1){
autoLogoutFor7Days();
}
uni.request({
...
})
}