fix: 🧩 用户退出系统完成

This commit is contained in:
bunny 2024-09-27 09:33:50 +08:00
parent 50af6bbec9
commit 154bd2ae14
4 changed files with 30 additions and 17 deletions

View File

@ -55,12 +55,7 @@ class PureHttp {
/** 通用请求工具函数 */ /** 通用请求工具函数 */
public request<T>(method: RequestMethods, url: string, param?: AxiosRequestConfig, axiosConfig?: PureHttpRequestConfig): Promise<T> { public request<T>(method: RequestMethods, url: string, param?: AxiosRequestConfig, axiosConfig?: PureHttpRequestConfig): Promise<T> {
const config = { const config = { method, url, ...param, ...axiosConfig } as PureHttpRequestConfig;
method,
url,
...param,
...axiosConfig,
} as PureHttpRequestConfig;
// 单独处理自定义请求/响应回调 // 单独处理自定义请求/响应回调
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -106,6 +101,7 @@ class PureHttp {
? config ? config
: new Promise(resolve => { : new Promise(resolve => {
const data = getToken(); const data = getToken();
// 存在token
if (data) { if (data) {
const now = new Date().getTime(); const now = new Date().getTime();
const expired = parseInt(data.expires) - now <= 0; const expired = parseInt(data.expires) - now <= 0;
@ -116,7 +112,8 @@ class PureHttp {
useUserStoreHook() useUserStoreHook()
.handRefreshToken({ refreshToken: data.refreshToken }) .handRefreshToken({ refreshToken: data.refreshToken })
.then((res: any) => { .then((res: any) => {
const token = res.data.accessToken; // 从结果中获取token
const token = res.data.token;
config.headers['token'] = formatToken(token); config.headers['token'] = formatToken(token);
PureHttp.requests.forEach(cb => cb(token)); PureHttp.requests.forEach(cb => cb(token));
PureHttp.requests = []; PureHttp.requests = [];
@ -127,7 +124,7 @@ class PureHttp {
} }
resolve(PureHttp.retryOriginalRequest(config)); resolve(PureHttp.retryOriginalRequest(config));
} else { } else {
config.headers['token'] = formatToken(data.accessToken); config.headers['token'] = formatToken(data.token);
resolve(config); resolve(config);
} }
} else { } else {

View File

@ -48,3 +48,11 @@ export const fetchPostEmailCode = (data: any) => {
export const refreshTokenApi = (data?: object) => { export const refreshTokenApi = (data?: object) => {
return http.request<BaseResult<RefreshTokenResult>>('post', 'user/noAuth/refreshToken', { data }); return http.request<BaseResult<RefreshTokenResult>>('post', 'user/noAuth/refreshToken', { data });
}; };
/**
* * 退
* @param data
*/
export const fetchLogOut = (data?: object) => {
return http.request<BaseResult<any>>('post', 'user/logOut', { data });
};

View File

@ -1,6 +1,6 @@
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { resetRouter, router, routerArrays, storageLocal, store, type userType } from '../utils'; import { resetRouter, router, routerArrays, storageLocal, store, type userType } from '../utils';
import { fetchLogin, fetchPostEmailCode, refreshTokenApi } from '@/api/v1/user'; import { fetchLogin, fetchLogOut, fetchPostEmailCode, refreshTokenApi } from '@/api/v1/user';
import { useMultiTagsStoreHook } from './multiTags'; import { useMultiTagsStoreHook } from './multiTags';
import { type DataInfo, removeToken, setToken, userKey } from '@/utils/auth'; import { type DataInfo, removeToken, setToken, userKey } from '@/utils/auth';
import { message } from '@/utils/message'; import { message } from '@/utils/message';
@ -57,13 +57,21 @@ export const useUserStore = defineStore({
* *
*/ */
async logOut() { async logOut() {
this.username = ''; // 登出
this.roles = []; const result = await fetchLogOut();
this.permissions = []; if (result.code == 200) {
removeToken(); this.username = '';
useMultiTagsStoreHook().handleTags('equal', [...routerArrays]); this.roles = [];
resetRouter(); this.permissions = [];
await router.push('/login'); removeToken();
useMultiTagsStoreHook().handleTags('equal', [...routerArrays]);
resetRouter();
message(result.message, { type: 'success' });
await router.push('/login');
return true;
}
message(result.message, { type: 'error' });
}, },
/** /**

View File

@ -93,7 +93,7 @@ export function removeToken() {
/** 格式化tokenjwt格式 */ /** 格式化tokenjwt格式 */
export const formatToken = (token: string): string => { export const formatToken = (token: string): string => {
return 'Bearer ' + token; return token;
}; };
/** 是否有按钮级别的权限(根据登录接口返回的`permissions`字段进行判断)*/ /** 是否有按钮级别的权限(根据登录接口返回的`permissions`字段进行判断)*/