refactor: ♻️ 获取用户信息和登出清除会话优化

This commit is contained in:
郝先瑞 2023-11-09 18:32:51 +08:00
parent 7ffbab34f1
commit 4486879b3b
5 changed files with 23 additions and 19 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -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 || "系统出错");