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

feat: 🚀 更新token

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