Browse Source

🎟 用户信息持久化

master
wangxiang 3 years ago
parent
commit
acd1689105
  1. 8
      kicc-ui/src/enums/cacheEnum.ts
  2. 28
      kicc-ui/src/store/modules/user.ts
  3. 4
      kicc-ui/src/utils/cache/persistent.ts
  4. 1
      kicc-ui/src/utils/http/axios/checkStatus.ts

8
kicc-ui/src/enums/cacheEnum.ts

@ -1,6 +1,6 @@
/** /**
* @program: kicc-ui * @program: kicc-ui
* @description: * @description:
* @author: entfrm开发团队- * @author: entfrm开发团队-
* @create: 2022/4/9 * @create: 2022/4/9
*/ */
@ -10,6 +10,12 @@ export const ACCESS_TOKEN_KEY = 'ACCESS__TOKEN__';
// 刷新令牌密钥 // 刷新令牌密钥
export const REFRESH_TOKEN_KEY = 'REFRESH__TOKEN__'; export const REFRESH_TOKEN_KEY = 'REFRESH__TOKEN__';
// 按钮权限键
export const PERMISSIONS_KEY = 'PERMISSIONS__';
// 角色id键
export const ROLE_IDS_KEY = 'ROLE__IDS__';
// 国际化键 // 国际化键
export const LOCALE_KEY = 'LOCALE__'; export const LOCALE_KEY = 'LOCALE__';

28
kicc-ui/src/store/modules/user.ts

@ -9,8 +9,8 @@ import type {UserInfo} from '/#/store';
import {defineStore} from 'pinia'; import {defineStore} from 'pinia';
import {store} from '/@/store'; import {store} from '/@/store';
import {PageEnum} from '/@/enums/pageEnum'; import {PageEnum} from '/@/enums/pageEnum';
import {ACCESS_TOKEN_KEY, REFRESH_TOKEN_KEY, USER_INFO_KEY} from '/@/enums/cacheEnum'; import {ACCESS_TOKEN_KEY, PERMISSIONS_KEY, REFRESH_TOKEN_KEY, ROLE_IDS_KEY, USER_INFO_KEY} from '/@/enums/cacheEnum';
import {setAuthCache} from '/@/utils/auth'; import {getAuthCache, setAuthCache} from '/@/utils/auth';
import {GetUserInfoModel, LoginParams} from '/@/api/sys/model/userModel'; import {GetUserInfoModel, LoginParams} from '/@/api/sys/model/userModel';
import {doLogout, getUserInfo, loginApi} from '/@/api/sys/user'; import {doLogout, getUserInfo, loginApi} from '/@/api/sys/user';
import {useI18n} from '/@/hooks/web/useI18n'; import {useI18n} from '/@/hooks/web/useI18n';
@ -24,35 +24,35 @@ interface UserState {
sessionTimeout: boolean; sessionTimeout: boolean;
roleIds: Recordable; roleIds: Recordable;
permissions: Recordable; permissions: Recordable;
access_token: string; access_token?: string;
refresh_token: string; refresh_token?: string;
} }
export const useUserStore = defineStore({ export const useUserStore = defineStore({
id: 'app-user', id: 'app-user',
state: (): UserState => ({ state: (): UserState => ({
// 用户信息 // 用户信息
userInfo: null, userInfo: getAuthCache<UserInfo>(USER_INFO_KEY),
// 登录是否过期 // 登录是否过期
sessionTimeout: false, sessionTimeout: false,
// 角色ID用于权限校验 // 角色ID用于权限校验
roleIds: [], roleIds: getAuthCache<Recordable>(ROLE_IDS_KEY),
// 按钮权限标识用于权限校验 // 按钮权限标识用于权限校验
permissions: [], permissions: getAuthCache<Recordable>(PERMISSIONS_KEY),
// 访问令牌 // 访问令牌
access_token: '', access_token: getAuthCache<string>(ACCESS_TOKEN_KEY),
// 刷新令牌 // 刷新令牌
refresh_token: '', refresh_token: getAuthCache<string>(REFRESH_TOKEN_KEY),
}), }),
getters: { getters: {
getUserInfo(): UserInfo | {[key: string]: any} { getUserInfo(): UserInfo {
return this.userInfo || {}; return this.userInfo! || {};
}, },
getAccessToken(): string { getAccessToken(): string {
return this.access_token; return this.access_token!;
}, },
getRefreshToken(): string { getRefreshToken(): string {
return this.refresh_token; return this.refresh_token!;
}, },
getSessionTimeout(): boolean { getSessionTimeout(): boolean {
return !!this.sessionTimeout; return !!this.sessionTimeout;
@ -67,6 +67,7 @@ export const useUserStore = defineStore({
actions: { actions: {
setRoleIds(roleIds: Recordable) { setRoleIds(roleIds: Recordable) {
this.roleIds = roleIds; this.roleIds = roleIds;
setAuthCache(ROLE_IDS_KEY, roleIds);
}, },
setPermissions(permissions: Recordable) { setPermissions(permissions: Recordable) {
this.permissions = permissions; this.permissions = permissions;
@ -141,6 +142,7 @@ export const useUserStore = defineStore({
} catch { } catch {
console.log('注销Token失败'); console.log('注销Token失败');
} }
debugger
this.setAccessToken(''); this.setAccessToken('');
this.setRefreshToken(''); this.setRefreshToken('');
this.setSessionTimeout(false); this.setSessionTimeout(false);

4
kicc-ui/src/utils/cache/persistent.ts vendored

@ -19,7 +19,7 @@ import {
PROJ_CFG_KEY, PROJ_CFG_KEY,
APP_LOCAL_CACHE_KEY, APP_LOCAL_CACHE_KEY,
APP_SESSION_CACHE_KEY, APP_SESSION_CACHE_KEY,
MULTIPLE_TABS_KEY, REFRESH_TOKEN_KEY, MULTIPLE_TABS_KEY, REFRESH_TOKEN_KEY, ROLE_IDS_KEY, PERMISSIONS_KEY,
} from '/@/enums/cacheEnum'; } from '/@/enums/cacheEnum';
import { DEFAULT_CACHE_TIME } from '/@/settings/encryptionSetting'; import { DEFAULT_CACHE_TIME } from '/@/settings/encryptionSetting';
import { toRaw } from 'vue'; import { toRaw } from 'vue';
@ -28,6 +28,8 @@ import { pick, omit } from 'lodash-es';
interface BasicStore { interface BasicStore {
[ACCESS_TOKEN_KEY]: string | number | null | undefined; [ACCESS_TOKEN_KEY]: string | number | null | undefined;
[REFRESH_TOKEN_KEY]: string | number | null | undefined; [REFRESH_TOKEN_KEY]: string | number | null | undefined;
[ROLE_IDS_KEY]: Recordable;
[PERMISSIONS_KEY]: Recordable;
[USER_INFO_KEY]: UserInfo; [USER_INFO_KEY]: UserInfo;
[LOCK_INFO_KEY]: LockInfo; [LOCK_INFO_KEY]: LockInfo;
[PROJ_CFG_KEY]: ProjectConfig; [PROJ_CFG_KEY]: ProjectConfig;

1
kicc-ui/src/utils/http/axios/checkStatus.ts

@ -31,6 +31,7 @@ export function checkStatus(status: number, msg: string, errorMessageMode: Error
case 401: case 401:
errMessage = t('sys.api.errMsg401'); errMessage = t('sys.api.errMsg401');
if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) { if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) {
debugger
userStore.setAccessToken(''); userStore.setAccessToken('');
userStore.setRefreshToken(''); userStore.setRefreshToken('');
userStore.setSessionTimeout(true); userStore.setSessionTimeout(true);

Loading…
Cancel
Save