mirror of
https://github.com/jumpserver/lina.git
synced 2025-09-19 01:11:07 +00:00
perf: 优化用户session 会话过期
This commit is contained in:
@@ -2,12 +2,10 @@
|
||||
import store from '@/store'
|
||||
import router, { resetRouter } from '@/router'
|
||||
import Vue from 'vue'
|
||||
import VueCookie from 'vue-cookie'
|
||||
import { message } from '@/utils/message'
|
||||
import orgUtil from '@/utils/org'
|
||||
import orgs from '@/api/orgs'
|
||||
import { getPropView, isViewHasOrgs } from '@/utils/jms'
|
||||
import request from '@/utils/request'
|
||||
|
||||
const whiteList = ['/login', process.env.VUE_APP_LOGIN_PATH] // no redirect whitelist
|
||||
|
||||
@@ -15,44 +13,11 @@ function reject(msg) {
|
||||
return new Promise((resolve, reject) => reject(msg))
|
||||
}
|
||||
|
||||
function isRenewalExpired(renewalTime) {
|
||||
const currentTimeStamp = Math.floor(new Date().getTime() / 1000)
|
||||
const sessionExpireTimestamp = VueCookie.get('jms_session_expire_timestamp')
|
||||
|
||||
if (!sessionExpireTimestamp) {
|
||||
return false
|
||||
}
|
||||
const timeDifferenceInSeconds = currentTimeStamp - parseInt(sessionExpireTimestamp, 10)
|
||||
return timeDifferenceInSeconds > renewalTime
|
||||
}
|
||||
|
||||
async function checkLogin({ to, from, next }) {
|
||||
if (whiteList.indexOf(to.path) !== -1) {
|
||||
next()
|
||||
}
|
||||
// Determine whether the user has logged in
|
||||
const sessionExpire = VueCookie.get('jms_session_expire')
|
||||
if (!sessionExpire) {
|
||||
request.get(process.env['VUE_APP_LOGOUT_PATH']).finally(() => {
|
||||
window.location = process.env.VUE_APP_LOGIN_PATH
|
||||
})
|
||||
return reject('No session mark found in cookie')
|
||||
} else if (sessionExpire === 'close') {
|
||||
let startTime = new Date().getTime()
|
||||
const intervalId = setInterval(() => {
|
||||
const endTime = new Date().getTime()
|
||||
const delta = (endTime - startTime)
|
||||
startTime = endTime
|
||||
Vue.$log.debug('Set session expire: ', delta)
|
||||
if (!isRenewalExpired(120)) {
|
||||
VueCookie.set('jms_session_expire', 'close', { expires: '2m' })
|
||||
} else {
|
||||
clearInterval(intervalId)
|
||||
}
|
||||
}, 10 * 1000)
|
||||
} else if (sessionExpire === 'age') {
|
||||
Vue.$log.debug('Session expire on age')
|
||||
}
|
||||
|
||||
try {
|
||||
return await store.dispatch('users/getProfile')
|
||||
} catch (e) {
|
||||
|
Reference in New Issue
Block a user