双token(未做完)

This commit is contained in:
caozehui
2025-02-07 10:39:30 +08:00
parent c16560a0ca
commit 6065fd1f67
8 changed files with 29 additions and 14 deletions

View File

@@ -43,7 +43,8 @@ class RequestHttp {
config.loading ?? (config.loading = true) config.loading ?? (config.loading = true)
config.loading && showFullScreenLoading() config.loading && showFullScreenLoading()
if (config.headers && typeof config.headers.set === 'function') { if (config.headers && typeof config.headers.set === 'function') {
config.headers.set('Authorization', 'Bearer ' + userStore.token) config.headers.set('Authorization', 'Bearer ' + userStore.accessToken)
config.headers.set('Refresh-token', userStore.refreshToken)
} }
return config return config
}, },
@@ -63,7 +64,8 @@ class RequestHttp {
tryHideFullScreenLoading() tryHideFullScreenLoading()
// 登陆失效 // 登陆失效
if (data.code == ResultEnum.OVERDUE) { if (data.code == ResultEnum.OVERDUE) {
userStore.setToken('') userStore.setAccessToken('')
userStore.setRefreshToken('')
userStore.setUserInfo({ name: '' }) userStore.setUserInfo({ name: '' })
router.replace(LOGIN_URL) router.replace(LOGIN_URL)
ElMessage.error(data.message) ElMessage.error(data.message)

View File

@@ -8,6 +8,7 @@ export namespace Login {
} }
export interface ResLogin { export interface ResLogin {
accessToken: string; accessToken: string;
refreshToken: string;
userInfo:{ userInfo:{
name: string; name: string;
} }

View File

@@ -30,3 +30,7 @@ export const getDictList = () =>{
return http.get<Dict>('/dictData/dictDataCache') return http.get<Dict>('/dictData/dictDataCache')
} }
// token刷新
export const refreshToken = () => {
return http.post<Login.ResLogin>(`${rePrefix}/refreshToken`, {},{ loading: false })
}

View File

@@ -74,7 +74,8 @@ const logout = () => {
// 1.执行退出登录接口 // 1.执行退出登录接口
await logoutApi(); await logoutApi();
// 2.清除 Token // 2.清除 Token
userStore.setToken(""); userStore.setAccessToken("");
userStore.setRefreshToken("");
userStore.setUserInfo({name: ""}); userStore.setUserInfo({name: ""});
dictStore.setDictData([]); dictStore.setDictData([]);
modeStore.setCurrentMode(''); modeStore.setCurrentMode('');

View File

@@ -52,7 +52,7 @@ router.beforeEach(async (to, from, next) => {
// 3.判断是访问登陆页,有 Token 就在当前页面,没有 Token 重置路由到登陆页 // 3.判断是访问登陆页,有 Token 就在当前页面,没有 Token 重置路由到登陆页
if (to.path.toLocaleLowerCase() === LOGIN_URL) { if (to.path.toLocaleLowerCase() === LOGIN_URL) {
if (userStore.token) return next(from.fullPath) if (userStore.accessToken) return next(from.fullPath)
resetRouter() resetRouter()
return next() return next()
} }
@@ -61,7 +61,7 @@ router.beforeEach(async (to, from, next) => {
if (ROUTER_WHITE_LIST.includes(to.path)) return next() if (ROUTER_WHITE_LIST.includes(to.path)) return next()
// 5.判断是否有 Token没有重定向到 login 页面 // 5.判断是否有 Token没有重定向到 login 页面
if (!userStore.token) return next({ path: LOGIN_URL, replace: true }) if (!userStore.accessToken) return next({ path: LOGIN_URL, replace: true })
// 6.如果没有菜单列表,就重新请求菜单列表并添加动态路由 // 6.如果没有菜单列表,就重新请求菜单列表并添加动态路由
if (!authStore.authMenuListGet.length) { if (!authStore.authMenuListGet.length) {

View File

@@ -28,7 +28,8 @@ export const initDynamicRouter = async () => {
type: "warning", type: "warning",
duration: 3000 duration: 3000
}); });
userStore.setToken(""); userStore.setAccessToken("");
userStore.setRefreshToken("");
router.replace(LOGIN_URL); router.replace(LOGIN_URL);
return Promise.reject("No permission"); return Promise.reject("No permission");
} }
@@ -48,7 +49,8 @@ export const initDynamicRouter = async () => {
}); });
} catch (error) { } catch (error) {
// 当按钮 || 菜单请求出错时,重定向到登陆页 // 当按钮 || 菜单请求出错时,重定向到登陆页
userStore.setToken(""); userStore.setAccessToken("");
userStore.setRefreshToken("");
router.replace(LOGIN_URL); router.replace(LOGIN_URL);
return Promise.reject(error); return Promise.reject(error);
} }

View File

@@ -1,19 +1,23 @@
import { defineStore } from "pinia"; import {defineStore} from "pinia";
import { UserState } from "@/stores/interface"; import {UserState} from "@/stores/interface";
import piniaPersistConfig from "@/stores/helper/persist"; import piniaPersistConfig from "@/stores/helper/persist";
import { USER_STORE_KEY } from "@/stores/constant"; import {USER_STORE_KEY} from "@/stores/constant";
export const useUserStore = defineStore({ export const useUserStore = defineStore({
id: USER_STORE_KEY, id: USER_STORE_KEY,
state: (): UserState => ({ state: (): UserState => ({
token: "", accessToken: "",
refreshToken: "",
userInfo: { name: "admin" }, userInfo: { name: "admin" },
}), }),
getters: {}, getters: {},
actions: { actions: {
// Set Token // Set Token
setToken(token: string) { setAccessToken(accessToken: string) {
this.token = token; this.accessToken = accessToken;
},
setRefreshToken(refreshToken: string) {
this.refreshToken = refreshToken;
}, },
// Set setUserInfo // Set setUserInfo
setUserInfo(userInfo: UserState["userInfo"]) { setUserInfo(userInfo: UserState["userInfo"]) {

View File

@@ -103,7 +103,8 @@ const login = (formEl: FormInstance | undefined) => {
...loginForm, ...loginForm,
password: loginForm.password, password: loginForm.password,
}) })
userStore.setToken(data.accessToken) userStore.setAccessToken(data.accessToken)
userStore.setRefreshToken(data.refreshToken)
userStore.setUserInfo(data.userInfo) userStore.setUserInfo(data.userInfo)
const response = await getDictList() const response = await getDictList()
const dictData = response.data as unknown as Dict[] const dictData = response.data as unknown as Dict[]