✨ 新增管理员代登录功能
This commit is contained in:
@@ -1,9 +1,34 @@
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
const TokenKey = 'Admin-Token'
|
||||
const ImpersonationTokenKey = 'bms-impersonation-token'
|
||||
let impersonationRecoveryInProgress = false
|
||||
|
||||
export function getToken() {
|
||||
return Cookies.get(TokenKey)
|
||||
return getImpersonationToken() || Cookies.get(TokenKey)
|
||||
}
|
||||
|
||||
export function getImpersonationToken() {
|
||||
return sessionStorage.getItem(ImpersonationTokenKey)
|
||||
}
|
||||
|
||||
export function setImpersonationToken(token) {
|
||||
sessionStorage.setItem(ImpersonationTokenKey, token)
|
||||
}
|
||||
|
||||
export function clearImpersonationToken() {
|
||||
sessionStorage.removeItem(ImpersonationTokenKey)
|
||||
}
|
||||
|
||||
export function recoverImpersonation() {
|
||||
if (impersonationRecoveryInProgress) return
|
||||
impersonationRecoveryInProgress = true
|
||||
clearImpersonationToken()
|
||||
location.replace('/index')
|
||||
}
|
||||
|
||||
export function isImpersonationRecoveryInProgress() {
|
||||
return impersonationRecoveryInProgress
|
||||
}
|
||||
|
||||
export function setToken(token) {
|
||||
@@ -11,5 +36,6 @@ export function setToken(token) {
|
||||
}
|
||||
|
||||
export function removeToken() {
|
||||
clearImpersonationToken()
|
||||
return Cookies.remove(TokenKey)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import axios from 'axios'
|
||||
import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import { getToken, getImpersonationToken, recoverImpersonation } from '@/utils/auth'
|
||||
import errorCode from '@/utils/errorCode'
|
||||
import { tansParams, blobValidate } from '@/utils/bms'
|
||||
import cache from '@/plugins/cache'
|
||||
@@ -83,6 +83,11 @@ service.interceptors.response.use(res => {
|
||||
return res.data
|
||||
}
|
||||
if (code === 401) {
|
||||
const impersonationToken = getImpersonationToken()
|
||||
if (impersonationToken && res.config.headers?.Authorization === 'Bearer ' + impersonationToken) {
|
||||
recoverImpersonation()
|
||||
return Promise.reject(new Error('代登录会话已结束,正在返回管理员账号'))
|
||||
}
|
||||
if (!isRelogin.show) {
|
||||
isRelogin.show = true
|
||||
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
|
||||
@@ -109,6 +114,12 @@ service.interceptors.response.use(res => {
|
||||
}
|
||||
},
|
||||
error => {
|
||||
const impersonationToken = getImpersonationToken()
|
||||
if (impersonationToken && error.response?.status === 401 &&
|
||||
error.config?.headers?.Authorization === 'Bearer ' + impersonationToken) {
|
||||
recoverImpersonation()
|
||||
return Promise.reject(error)
|
||||
}
|
||||
console.log('err' + error)
|
||||
let { message } = error
|
||||
if (message == "Network Error") {
|
||||
|
||||
Reference in New Issue
Block a user