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