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')
|
||
}
|
||
}
|
||
|
||
}
|