refactor: ♻️ 获取用户信息和登出清除会话优化
This commit is contained in:
parent
7ffbab34f1
commit
4486879b3b
|
|
@ -5,7 +5,7 @@ import { UserForm, UserInfo, UserPageVO, UserQuery } from "./types";
|
||||||
/**
|
/**
|
||||||
* 登录成功后获取用户信息(昵称、头像、权限集合和角色集合)
|
* 登录成功后获取用户信息(昵称、头像、权限集合和角色集合)
|
||||||
*/
|
*/
|
||||||
export function getUserInfo(): AxiosPromise<UserInfo> {
|
export function getUserInfoApi(): AxiosPromise<UserInfo> {
|
||||||
return request({
|
return request({
|
||||||
url: "/api/v1/users/me",
|
url: "/api/v1/users/me",
|
||||||
method: "get",
|
method: "get",
|
||||||
|
|
|
||||||
|
|
@ -88,8 +88,6 @@ function toggleSideBar() {
|
||||||
<Sidebar class="sidebar-container" />
|
<Sidebar class="sidebar-container" />
|
||||||
<template v-if="layout === 'mix'">
|
<template v-if="layout === 'mix'">
|
||||||
<div class="mix-wrap">
|
<div class="mix-wrap">
|
||||||
<!-- :menu-list="mixLeftMenu -->
|
|
||||||
<!-- :menu-list="permissionStore.routes -->
|
|
||||||
<div class="left-wrap">
|
<div class="left-wrap">
|
||||||
<LeftMenu :menu-list="mixLeftMenu" :base-path="activeTopMenu" />
|
<LeftMenu :menu-list="mixLeftMenu" :base-path="activeTopMenu" />
|
||||||
<div class="menu-action">
|
<div class="menu-action">
|
||||||
|
|
@ -155,6 +153,7 @@ function toggleSideBar() {
|
||||||
.main-container {
|
.main-container {
|
||||||
padding-top: 50px;
|
padding-top: 50px;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 顶部模式全局变量修改
|
// 顶部模式全局变量修改
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ router.beforeEach(async (to, from, next) => {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
const { roles } = await userStore.getInfo();
|
const { roles } = await userStore.getUserInfo();
|
||||||
const accessRoutes = await permissionStore.generateRoutes(roles);
|
const accessRoutes = await permissionStore.generateRoutes(roles);
|
||||||
accessRoutes.forEach((route) => {
|
accessRoutes.forEach((route) => {
|
||||||
router.addRoute(route);
|
router.addRoute(route);
|
||||||
|
|
@ -40,7 +40,7 @@ router.beforeEach(async (to, from, next) => {
|
||||||
next({ ...to, replace: true });
|
next({ ...to, replace: true });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// 移除 token 并跳转登录页
|
// 移除 token 并跳转登录页
|
||||||
await userStore.resetStore();
|
await userStore.resetToken();
|
||||||
next(`/login?redirect=${to.path}`);
|
next(`/login?redirect=${to.path}`);
|
||||||
NProgress.done();
|
NProgress.done();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { defineStore } from "pinia";
|
import { defineStore } from "pinia";
|
||||||
|
|
||||||
import { loginApi, logoutApi } from "@/api/auth";
|
import { loginApi, logoutApi } from "@/api/auth";
|
||||||
import { getUserInfo } from "@/api/user";
|
import { getUserInfoApi } from "@/api/user";
|
||||||
import { resetRouter } from "@/router";
|
import { resetRouter } from "@/router";
|
||||||
import { store } from "@/store";
|
import { store } from "@/store";
|
||||||
|
|
||||||
|
|
@ -39,9 +39,9 @@ export const useUserStore = defineStore("user", () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取信息(用户昵称、头像、角色集合、权限集合)
|
// 获取信息(用户昵称、头像、角色集合、权限集合)
|
||||||
function getInfo() {
|
function getUserInfo() {
|
||||||
return new Promise<UserInfo>((resolve, reject) => {
|
return new Promise<UserInfo>((resolve, reject) => {
|
||||||
getUserInfo()
|
getUserInfoApi()
|
||||||
.then(({ data }) => {
|
.then(({ data }) => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
reject("Verification failed, please Login again.");
|
reject("Verification failed, please Login again.");
|
||||||
|
|
@ -60,12 +60,12 @@ export const useUserStore = defineStore("user", () => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 注销
|
// user logout
|
||||||
function logout() {
|
function logout() {
|
||||||
return new Promise<void>((resolve, reject) => {
|
return new Promise<void>((resolve, reject) => {
|
||||||
logoutApi()
|
logoutApi()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
resetStore();
|
token.value = "";
|
||||||
location.reload(); // 清空路由
|
location.reload(); // 清空路由
|
||||||
resolve();
|
resolve();
|
||||||
})
|
})
|
||||||
|
|
@ -75,19 +75,22 @@ export const useUserStore = defineStore("user", () => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 清空缓存 */
|
// remove token
|
||||||
function resetStore() {
|
function resetToken() {
|
||||||
resetRouter();
|
return new Promise<void>((resolve) => {
|
||||||
token.value = "";
|
token.value = "";
|
||||||
Object.assign(user, { roles: [], perms: [] });
|
resetRouter();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
token,
|
token,
|
||||||
user,
|
user,
|
||||||
login,
|
login,
|
||||||
getInfo,
|
getUserInfo,
|
||||||
logout,
|
logout,
|
||||||
resetStore,
|
resetToken,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,10 @@ service.interceptors.response.use(
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
type: "warning",
|
type: "warning",
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
localStorage.clear();
|
const userStore = useUserStoreHook();
|
||||||
window.location.href = "/";
|
userStore.resetToken().then(() => {
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(msg || "系统出错");
|
ElMessage.error(msg || "系统出错");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue