feat(系统设置): 认证登陆调试首次跳转调试中
This commit is contained in:
parent
41816c034f
commit
984e0de9a9
|
@ -19,6 +19,8 @@
|
||||||
import { useUserStore } from '@/store';
|
import { useUserStore } from '@/store';
|
||||||
import useAppStore from '@/store/modules/app';
|
import useAppStore from '@/store/modules/app';
|
||||||
import useLicenseStore from '@/store/modules/setting/license';
|
import useLicenseStore from '@/store/modules/setting/license';
|
||||||
|
import { getQueryVariable } from '@/utils';
|
||||||
|
import { setToken } from '@/utils/auth';
|
||||||
import { getLocalStorage, setLocalStorage } from '@/utils/local-storage';
|
import { getLocalStorage, setLocalStorage } from '@/utils/local-storage';
|
||||||
import { setFavicon, watchStyle, watchTheme } from '@/utils/theme';
|
import { setFavicon, watchStyle, watchTheme } from '@/utils/theme';
|
||||||
|
|
||||||
|
@ -77,6 +79,11 @@
|
||||||
onBeforeMount(async () => {
|
onBeforeMount(async () => {
|
||||||
await getPublicKey();
|
await getPublicKey();
|
||||||
if (WHITE_LIST.find((el) => el.path === window.location.hash.split('#')[1]) === undefined) {
|
if (WHITE_LIST.find((el) => el.path === window.location.hash.split('#')[1]) === undefined) {
|
||||||
|
const TOKEN = getQueryVariable('_token');
|
||||||
|
const CSRF = getQueryVariable('_csrf');
|
||||||
|
if (TOKEN !== null && TOKEN !== undefined && CSRF !== null && CSRF !== undefined) {
|
||||||
|
setToken(window.atob(TOKEN), CSRF);
|
||||||
|
}
|
||||||
await userStore.checkIsLogin();
|
await userStore.checkIsLogin();
|
||||||
}
|
}
|
||||||
const { height } = useWindowSize();
|
const { height } = useWindowSize();
|
||||||
|
|
|
@ -14,14 +14,13 @@ import { useI18n } from '@/hooks/useI18n';
|
||||||
import useUser from '@/hooks/useUser';
|
import useUser from '@/hooks/useUser';
|
||||||
import { NO_PROJECT_ROUTE_NAME } from '@/router/constants';
|
import { NO_PROJECT_ROUTE_NAME } from '@/router/constants';
|
||||||
import useLicenseStore from '@/store/modules/setting/license';
|
import useLicenseStore from '@/store/modules/setting/license';
|
||||||
import { getHashParameters } from '@/utils';
|
import { getHashParameters, getQueryVariable } from '@/utils';
|
||||||
import { clearToken, setToken } from '@/utils/auth';
|
import { clearToken, setToken } from '@/utils/auth';
|
||||||
import { composePermissions, getFirstRouteNameByPermission } from '@/utils/permission';
|
import { composePermissions, getFirstRouteNameByPermission } from '@/utils/permission';
|
||||||
import { removeRouteListener } from '@/utils/route-listener';
|
import { removeRouteListener } from '@/utils/route-listener';
|
||||||
|
|
||||||
import type { LoginData } from '@/models/user';
|
import type { LoginData } from '@/models/user';
|
||||||
import { LoginRes } from '@/models/user';
|
import { LoginRes } from '@/models/user';
|
||||||
import { ProjectManagementRouteEnum } from '@/enums/routeEnum';
|
|
||||||
|
|
||||||
import useAppStore from '../app';
|
import useAppStore from '../app';
|
||||||
import { UserState } from './types';
|
import { UserState } from './types';
|
||||||
|
@ -186,7 +185,13 @@ const useUserStore = defineStore('user', {
|
||||||
const appStore = useAppStore();
|
const appStore = useAppStore();
|
||||||
setToken(res.sessionId, res.csrfToken);
|
setToken(res.sessionId, res.csrfToken);
|
||||||
this.setInfo(res);
|
this.setInfo(res);
|
||||||
const { orgId, pId } = getHashParameters();
|
let { orgId, pId } = getHashParameters();
|
||||||
|
if (!pId) {
|
||||||
|
pId = getQueryVariable('_pId') || '';
|
||||||
|
}
|
||||||
|
if (!orgId) {
|
||||||
|
orgId = getQueryVariable('_orgId') || '';
|
||||||
|
}
|
||||||
// 1. forceSet是强制设置,需要设置res的,2.非force且地址栏有,则也设置 3.地址栏参数为空就不设置
|
// 1. forceSet是强制设置,需要设置res的,2.非force且地址栏有,则也设置 3.地址栏参数为空就不设置
|
||||||
// 如果访问页面的时候携带了组织 ID和项目 ID,则不设置
|
// 如果访问页面的时候携带了组织 ID和项目 ID,则不设置
|
||||||
if (!forceSet && orgId) {
|
if (!forceSet && orgId) {
|
||||||
|
@ -207,47 +212,6 @@ const useUserStore = defineStore('user', {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async setUserInfoByAuth(pId: string, orgId: string) {
|
|
||||||
const appStore = useAppStore();
|
|
||||||
const router = useRouter();
|
|
||||||
const res = await userIsLogin();
|
|
||||||
this.setInfo(res);
|
|
||||||
appStore.setCurrentOrgId(orgId);
|
|
||||||
appStore.setCurrentProjectId(pId);
|
|
||||||
try {
|
|
||||||
const HasProjectPermission = await getUserHasProjectPermission(appStore.currentProjectId);
|
|
||||||
if (!HasProjectPermission) {
|
|
||||||
// 没有项目权限(用户所在的当前项目被禁用&用户被移除出去该项目)
|
|
||||||
router.push({
|
|
||||||
name: NO_PROJECT_ROUTE_NAME,
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const resp = await getProjectInfo(appStore.currentProjectId);
|
|
||||||
if (!resp) {
|
|
||||||
// 如果项目被删除或者被禁用,跳转到无项目页面
|
|
||||||
router.push({
|
|
||||||
name: NO_PROJECT_ROUTE_NAME,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (resp) {
|
|
||||||
appStore.setCurrentMenuConfig(resp?.moduleIds || []);
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
appStore.setCurrentMenuConfig([]);
|
|
||||||
// eslint-disable-next-line no-console
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
const { isLoginPage } = useUser();
|
|
||||||
if (isLoginPage()) {
|
|
||||||
// 当前页面为登录页面,且已经登录,跳转到首页
|
|
||||||
const currentRouteName = router.getRoutes()
|
|
||||||
? getFirstRouteNameByPermission(router.getRoutes())
|
|
||||||
: ProjectManagementRouteEnum.PROJECT_MANAGEMENT_PERMISSION_BASIC_INFO;
|
|
||||||
router.push({ name: currentRouteName });
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// 更新本地设置
|
// 更新本地设置
|
||||||
updateLocalConfig(partial: Partial<UserState>) {
|
updateLocalConfig(partial: Partial<UserState>) {
|
||||||
this.$patch(partial);
|
this.$patch(partial);
|
||||||
|
@ -274,8 +238,8 @@ const useUserStore = defineStore('user', {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async checkIsLogin(forceSet = false) {
|
async checkIsLogin(forceSet = false) {
|
||||||
const { isLoginPage } = useUser();
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const { isLoginPage } = useUser();
|
||||||
const appStore = useAppStore();
|
const appStore = useAppStore();
|
||||||
const isLogin = await this.isLogin(forceSet);
|
const isLogin = await this.isLogin(forceSet);
|
||||||
if (isLogin && appStore.currentProjectId !== 'no_such_project') {
|
if (isLogin && appStore.currentProjectId !== 'no_such_project') {
|
||||||
|
@ -308,9 +272,7 @@ const useUserStore = defineStore('user', {
|
||||||
}
|
}
|
||||||
if (isLoginPage() && isLogin) {
|
if (isLoginPage() && isLogin) {
|
||||||
// 当前页面为登录页面,且已经登录,跳转到首页
|
// 当前页面为登录页面,且已经登录,跳转到首页
|
||||||
const currentRouteName = router.getRoutes()
|
const currentRouteName = getFirstRouteNameByPermission(router.getRoutes());
|
||||||
? getFirstRouteNameByPermission(router.getRoutes())
|
|
||||||
: ProjectManagementRouteEnum.PROJECT_MANAGEMENT_PERMISSION_BASIC_INFO;
|
|
||||||
router.push({ name: currentRouteName });
|
router.push({ name: currentRouteName });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -675,6 +675,27 @@ export const getHashParameters = (): Record<string, string> => {
|
||||||
return params;
|
return params;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function getQueryVariable(variable: string) {
|
||||||
|
const urlString = window.location.href;
|
||||||
|
const queryIndex = urlString.indexOf('?');
|
||||||
|
if (queryIndex !== -1) {
|
||||||
|
const query = urlString.substring(queryIndex + 1);
|
||||||
|
|
||||||
|
// 分割查询参数
|
||||||
|
const params = query.split('&');
|
||||||
|
// 遍历参数,找到 _token 参数的值
|
||||||
|
let variableValue;
|
||||||
|
params.forEach((param) => {
|
||||||
|
const equalIndex = param.indexOf('=');
|
||||||
|
const variableName = param.substring(0, equalIndex);
|
||||||
|
if (variableName === variable) {
|
||||||
|
variableValue = param.substring(equalIndex + 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return variableValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let lastTimestamp = 0;
|
let lastTimestamp = 0;
|
||||||
let sequence = 0;
|
let sequence = 0;
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@
|
||||||
import { useAppStore, useUserStore } from '@/store';
|
import { useAppStore, useUserStore } from '@/store';
|
||||||
import useLicenseStore from '@/store/modules/setting/license';
|
import useLicenseStore from '@/store/modules/setting/license';
|
||||||
import { encrypted } from '@/utils';
|
import { encrypted } from '@/utils';
|
||||||
import { setLoginExpires, setToken } from '@/utils/auth';
|
import { setLoginExpires } from '@/utils/auth';
|
||||||
import { getFirstRouteNameByPermission, routerNameHasPermission } from '@/utils/permission';
|
import { getFirstRouteNameByPermission, routerNameHasPermission } from '@/utils/permission';
|
||||||
|
|
||||||
import type { LoginData } from '@/models/user';
|
import type { LoginData } from '@/models/user';
|
||||||
|
@ -359,43 +359,9 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getQueryVariable(variable: string) {
|
|
||||||
const urlString = window.location.href;
|
|
||||||
|
|
||||||
const queryIndex = urlString.indexOf('?');
|
|
||||||
if (queryIndex !== -1) {
|
|
||||||
const query = urlString.substring(queryIndex + 1);
|
|
||||||
|
|
||||||
// 分割查询参数
|
|
||||||
const params = query.split('&');
|
|
||||||
// 遍历参数,找到 _token 参数的值
|
|
||||||
let variableValue;
|
|
||||||
params.forEach((param) => {
|
|
||||||
const equalIndex = param.indexOf('=');
|
|
||||||
const variableName = param.substring(0, equalIndex);
|
|
||||||
if (variableName === variable) {
|
|
||||||
variableValue = param.substring(equalIndex + 1);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return variableValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function checkAuthUrlParam() {
|
|
||||||
const TOKEN = getQueryVariable('_token');
|
|
||||||
const CSRF = getQueryVariable('_csrf');
|
|
||||||
const pId = getQueryVariable('_pId');
|
|
||||||
const orgId = getQueryVariable('_orgId');
|
|
||||||
if (TOKEN !== null && TOKEN !== undefined && CSRF !== null && CSRF !== undefined) {
|
|
||||||
setToken(window.atob(TOKEN), CSRF);
|
|
||||||
await userStore.setUserInfoByAuth(pId || '', orgId || '');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
userStore.getAuthentication();
|
userStore.getAuthentication();
|
||||||
initPlatformInfo();
|
initPlatformInfo();
|
||||||
checkAuthUrlParam();
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue