feat: ✨ 新增 JWT 刷新模式,支持因访问令牌过期而失败的请求重试
This commit is contained in:
@@ -5,7 +5,7 @@ import { useDictStoreHook } from "@/store/modules/dict";
|
||||
import AuthAPI, { type LoginData } from "@/api/auth";
|
||||
import UserAPI, { type UserInfo } from "@/api/system/user";
|
||||
|
||||
import { setToken, clearToken } from "@/utils/auth";
|
||||
import { setToken, setRefreshToken, getRefreshToken, clearToken } from "@/utils/auth";
|
||||
|
||||
export const useUserStore = defineStore("user", () => {
|
||||
const userInfo = useStorage<UserInfo>("userInfo", {} as UserInfo);
|
||||
@@ -20,8 +20,9 @@ export const useUserStore = defineStore("user", () => {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
AuthAPI.login(loginData)
|
||||
.then((data) => {
|
||||
const { tokenType, accessToken } = data;
|
||||
const { tokenType, accessToken, refreshToken } = data;
|
||||
setToken(tokenType + " " + accessToken); // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
|
||||
setRefreshToken(refreshToken);
|
||||
resolve();
|
||||
})
|
||||
.catch((error) => {
|
||||
@@ -69,7 +70,27 @@ export const useUserStore = defineStore("user", () => {
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理用户会话
|
||||
* 刷新 token
|
||||
*/
|
||||
function refreshToken() {
|
||||
const refreshToken = getRefreshToken();
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
AuthAPI.refreshToken(refreshToken)
|
||||
.then((data) => {
|
||||
const { tokenType, accessToken, refreshToken } = data;
|
||||
setToken(tokenType + " " + accessToken);
|
||||
setRefreshToken(refreshToken);
|
||||
resolve();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(" refreshToken 刷新失败", error);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理用户数据
|
||||
*
|
||||
* @returns
|
||||
*/
|
||||
@@ -88,6 +109,7 @@ export const useUserStore = defineStore("user", () => {
|
||||
login,
|
||||
logout,
|
||||
clearUserData,
|
||||
refreshToken,
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user