mirror of
https://github.com/jumpserver/lina.git
synced 2025-09-20 18:49:19 +00:00
perf: 优化用户session 会话过期
This commit is contained in:
@@ -2,12 +2,10 @@
|
|||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import router, { resetRouter } from '@/router'
|
import router, { resetRouter } from '@/router'
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import VueCookie from 'vue-cookie'
|
|
||||||
import { message } from '@/utils/message'
|
import { message } from '@/utils/message'
|
||||||
import orgUtil from '@/utils/org'
|
import orgUtil from '@/utils/org'
|
||||||
import orgs from '@/api/orgs'
|
import orgs from '@/api/orgs'
|
||||||
import { getPropView, isViewHasOrgs } from '@/utils/jms'
|
import { getPropView, isViewHasOrgs } from '@/utils/jms'
|
||||||
import request from '@/utils/request'
|
|
||||||
|
|
||||||
const whiteList = ['/login', process.env.VUE_APP_LOGIN_PATH] // no redirect whitelist
|
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))
|
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 }) {
|
async function checkLogin({ to, from, next }) {
|
||||||
if (whiteList.indexOf(to.path) !== -1) {
|
if (whiteList.indexOf(to.path) !== -1) {
|
||||||
next()
|
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 {
|
try {
|
||||||
return await store.dispatch('users/getProfile')
|
return await store.dispatch('users/getProfile')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
Reference in New Issue
Block a user