feat(系统设置): 认证登陆调试首次跳转调试中

This commit is contained in:
guoyuqi 2024-07-09 21:10:23 +08:00 committed by Craftsman
parent 41816c034f
commit 984e0de9a9
4 changed files with 39 additions and 83 deletions

View File

@ -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();

View File

@ -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 });
} }
}, },

View File

@ -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;

View File

@ -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>