47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
|
|
// 在某个适当的时间点检查登录状态是否过期
|
|||
|
|
function isLoginExpired(loginTimestamp, expirationDuration) {
|
|||
|
|
// 获取登录时间戳
|
|||
|
|
// 如果没有登录时间戳,说明用户未登录或状态已过期
|
|||
|
|
if (!loginTimestamp) {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 计算登录时间和现在的时间差
|
|||
|
|
const currentTimestamp = Date.now();
|
|||
|
|
const duration = currentTimestamp - loginTimestamp;
|
|||
|
|
|
|||
|
|
// 如果时间差大于3小时的毫秒数,则登录状态过期
|
|||
|
|
return duration > expirationDuration;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
export default function ({ route, redirect, store }) {
|
|||
|
|
if (route.name === 'manager-login') {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
if (localStorage.getItem('userInfo')) {
|
|||
|
|
const cache = JSON.parse(localStorage.getItem('userInfo'))
|
|||
|
|
const { expire, loginTime } = cache
|
|||
|
|
// 在页面加载时检查登录状态
|
|||
|
|
if (isLoginExpired(loginTime, expire)) {
|
|||
|
|
// 用户登录已过期,执行登录过期的逻辑
|
|||
|
|
console.log('登录已过期');
|
|||
|
|
return redirect('/manager/login')
|
|||
|
|
} else {
|
|||
|
|
// 用户登录有效,执行登录有效的逻辑
|
|||
|
|
store.dispatch('user/setUserInfo', cache)
|
|||
|
|
if (route.path === '/') {
|
|||
|
|
return redirect('/home')
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
// 假设用户信息存储在 Vuex store 中
|
|||
|
|
const user = store.state.user
|
|||
|
|
// 检查路由是否需要认证
|
|||
|
|
if (!user.isLogin) {
|
|||
|
|
return redirect('/manager/login')
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|