提交 520c88d8 authored 作者: 詹银鑫's avatar 詹银鑫

feat: 🚀 更新token

上级 8ea6f114
......@@ -7,7 +7,7 @@
"editor.tabSize": 2,
"editor.formatOnPaste": true,
"editor.guides.bracketPairs": "active",
"files.autoSave": "afterDelay",
"files.autoSave": "off",
"git.confirmSync": false,
"workbench.startupEditor": "newUntitledFile",
"editor.suggestSelection": "first",
......
......@@ -27,6 +27,8 @@ export type UserResult = {
export type RefreshTokenResult = {
success: boolean;
data: {
/** `token` */
jwt?: string;
/** `token` */
accessToken: string;
/** 用于调用刷新`accessToken`的接口时所需的`token` */
......@@ -79,7 +81,9 @@ export const getLogin = (data?: object) => {
/** 刷新`token` */
export const refreshTokenApi = (data?: object) => {
return http.request<RefreshTokenResult>("post", "/refresh-token", { data });
return http.request<RefreshTokenResult>("post", "/api/auth/refresh-token", {
data
});
};
/** 账户设置-个人信息 */
......
......@@ -14,7 +14,13 @@ import {
refreshTokenApi
} from "@/api/user";
import { useMultiTagsStoreHook } from "./multiTags";
import { type DataInfo, setToken, removeToken, userKey } from "@/utils/auth";
import {
type DataInfo,
setToken,
removeToken,
userKey,
getToken
} from "@/utils/auth";
export const useUserStore = defineStore("pure-user", {
state: (): userType => ({
......@@ -106,7 +112,12 @@ export const useUserStore = defineStore("pure-user", {
refreshTokenApi(data)
.then(data => {
if (data) {
if (data.data.jwt) {
data.data.accessToken = data.data.jwt;
}
setToken(data.data);
console.log("data", data.data);
console.log(getToken());
resolve(data);
}
})
......
......@@ -19,6 +19,8 @@ export interface DataInfo<T> {
roles?: Array<string>;
/** 当前登录用户的按钮级别权限 */
permissions?: Array<string>;
/** 用于调用刷新accessToken的接口时所需的token */
jwt?: string;
}
export const userKey = "user-info";
......
......@@ -52,7 +52,6 @@ class PureHttp {
private static retryOriginalRequest(config: PureHttpRequestConfig) {
return new Promise(resolve => {
PureHttp.requests.push((token: string) => {
debugger;
config.headers["Authorization"] = formatToken(token);
resolve(config);
});
......@@ -74,16 +73,16 @@ class PureHttp {
PureHttp.initConfig.beforeRequestCallback(config);
return config;
}
/** 请求白名单,放置一些不需要`token`的接口(通过设置请求白名单,防止`token`过期后再请求造成的死循环问题) */
const whiteList = ["/refresh-token", "/login"];
return whiteList.some(url => config.url.endsWith(url))
? config
: new Promise(resolve => {
const data = getToken();
console.log(4444, data);
if (data) {
const now = new Date().getTime();
console.log("time", parseInt(data.expires) - now);
const expired = parseInt(data.expires) - now <= 0;
if (expired) {
if (!PureHttp.isRefreshing) {
......@@ -139,7 +138,63 @@ class PureHttp {
return response.data;
},
(error: PureHttpError) => {
// A0301 TOKEN错误 A0201
const $error = error;
if (($error.response.data as { code: string })?.code === "A0301") {
/** 请求白名单,放置一些不需要`token`的接口(通过设置请求白名单,防止`token`过期后再请求造成的死循环问题) */
console.log("error", $error.config);
const whiteList = ["/refresh-token", "/login"];
return whiteList.some(url => $error.config.url.endsWith(url))
? $error.config
: new Promise(() => {
const data = getToken();
if (data) {
if (!PureHttp.isRefreshing) {
PureHttp.isRefreshing = true;
// token过期刷新
useUserStoreHook()
.handRefreshToken({
refreshToken: data.refreshToken
})
.then(res => {
console.log("res", res);
const token = res.data.jwt;
// let refreshToken = res.data.refreshToken;
// console.log("token", token);
$error.config.headers["Authorization"] =
formatToken(token);
// 遍历并执行存储的回调函数
PureHttp.requests.forEach(cb => cb(token));
PureHttp.requests = []; // 清空队列
// 重新发起原始请求
return PureHttp.axiosInstance.request($error.config);
// PureHttp.retryOriginalRequest($error.config);
// PureHttp.requests.forEach(cb => {
// console.log("cb", cb);
// cb(token);
// });
// PureHttp.requests = [];
})
.finally(() => {
PureHttp.isRefreshing = false;
});
// }
// resolve());
// } else {
// config.headers["Authorization"] = formatToken(
// data.accessToken
// );
// resolve(config);
// }
// } else {
// resolve(config);
}
}
});
}
$error.isCancelRequest = Axios.isCancel($error);
// 关闭进度条动画
NProgress.done();
......
......@@ -137,9 +137,11 @@ const onLogin = async (formEl: FormInstance | undefined) => {
.then(res => {
if (res.status === 200 || res.success) {
// 登录成功,设置 token
console.log("res", res.data.refreshToken);
setToken({
accessToken: res.data.jwt,
refreshToken: "",
// accessToken: res.data.jwt,
accessToken: "1213123",
refreshToken: res.data.refreshToken,
expires: new Date(Date.now() + 9999999 * 1000)
});
console.log("getToken", getToken);
......@@ -150,6 +152,7 @@ const onLogin = async (formEl: FormInstance | undefined) => {
router
.push(getTopMenu(true).path)
.then(() => {
debugger;
// 显示登录成功消息
message(t("login.pureLoginSuccess"), { type: "success" });
})
......
......@@ -32,9 +32,9 @@ export default ({ mode }: ConfigEnv): UserConfigExport => {
// 旭哥地址
// target: "http://192.168.1.180:5001",
// 服务器地址
target: "http://192.168.1.248:5001",
// target: "http://192.168.1.248:5001",
// 熊熊哥地址
// target: "http://192.168.1.194:5001",
target: "http://192.168.0.57:5001",
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, "")
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论