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