解决登录token的bug,移除refreshtoken
This commit is contained in:
@@ -12,11 +12,6 @@ export default {
|
||||
return await request.post('auth/logout')
|
||||
},
|
||||
},
|
||||
refresh: {
|
||||
post: async function () {
|
||||
return await request.post('auth/refresh')
|
||||
},
|
||||
},
|
||||
me: {
|
||||
get: async function () {
|
||||
return await request.get('auth/me')
|
||||
|
||||
@@ -4,11 +4,10 @@ import { resetRouter } from '../../router'
|
||||
import { customStorage } from '../persist'
|
||||
import userRoutes from '@/config/routes'
|
||||
|
||||
export const useUserStore = defineStore(
|
||||
export const useUserStore = defineStore(
|
||||
'user',
|
||||
() => {
|
||||
const token = ref('')
|
||||
const refreshToken = ref('')
|
||||
const userInfo = ref(null)
|
||||
const menu = ref([])
|
||||
const permissions = ref([])
|
||||
@@ -18,11 +17,6 @@ export const useUserStore = defineStore(
|
||||
token.value = newToken
|
||||
}
|
||||
|
||||
// 设置 refresh token
|
||||
function setRefreshToken(newRefreshToken) {
|
||||
refreshToken.value = newRefreshToken
|
||||
}
|
||||
|
||||
// 设置用户信息
|
||||
function setUserInfo(info) {
|
||||
userInfo.value = info
|
||||
@@ -79,7 +73,6 @@ export const useUserStore = defineStore(
|
||||
// 登出
|
||||
function logout() {
|
||||
token.value = ''
|
||||
refreshToken.value = ''
|
||||
userInfo.value = null
|
||||
menu.value = []
|
||||
|
||||
@@ -94,11 +87,9 @@ export const useUserStore = defineStore(
|
||||
|
||||
return {
|
||||
token,
|
||||
refreshToken,
|
||||
userInfo,
|
||||
menu,
|
||||
setToken,
|
||||
setRefreshToken,
|
||||
setUserInfo,
|
||||
setMenu,
|
||||
getMenu,
|
||||
@@ -112,7 +103,7 @@ export const useUserStore = defineStore(
|
||||
persist: {
|
||||
key: 'user-store',
|
||||
storage: customStorage,
|
||||
pick: ['token', 'refreshToken', 'userInfo', 'menu']
|
||||
pick: ['token', 'userInfo', 'menu']
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@@ -9,11 +9,6 @@ const request = axios.create({
|
||||
baseURL: config.API_URL,
|
||||
});
|
||||
|
||||
// 是否正在刷新 token
|
||||
let isRefreshing = false;
|
||||
// 存储待重试的请求
|
||||
let requests = [];
|
||||
|
||||
// 请求拦截器
|
||||
request.interceptors.request.use(
|
||||
(config) => {
|
||||
@@ -62,45 +57,11 @@ request.interceptors.response.use(
|
||||
|
||||
// 401 未授权 - token 过期或无效
|
||||
if (status === 401) {
|
||||
// 如果正在刷新 token,将请求加入队列
|
||||
if (isRefreshing) {
|
||||
return new Promise((resolve) => {
|
||||
requests.push((token) => {
|
||||
// 重新设置请求头
|
||||
error.config.headers["Authorization"] =
|
||||
`Bearer ${token}`;
|
||||
resolve(http(error.config));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 标记正在刷新
|
||||
isRefreshing = true;
|
||||
|
||||
try {
|
||||
// 尝试刷新 token
|
||||
const newToken = await refreshToken();
|
||||
|
||||
// 刷新成功,更新 token
|
||||
userStore.setToken(newToken);
|
||||
|
||||
// 执行队列中的所有请求
|
||||
requests.forEach((callback) => callback(newToken));
|
||||
requests = [];
|
||||
|
||||
// 重新执行当前请求
|
||||
error.config.headers["Authorization"] = `Bearer ${newToken}`;
|
||||
return request(error.config);
|
||||
} catch (refreshError) {
|
||||
// 刷新失败,清空队列并跳转登录页
|
||||
requests = [];
|
||||
userStore.logout();
|
||||
router.push("/login");
|
||||
message.error("登录已过期,请重新登录");
|
||||
return Promise.reject(refreshError);
|
||||
} finally {
|
||||
isRefreshing = false;
|
||||
}
|
||||
// 直接登出并跳转到登录页
|
||||
userStore.logout();
|
||||
router.push("/login");
|
||||
message.error("登录已过期,请重新登录");
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
// 403 禁止访问
|
||||
@@ -128,13 +89,4 @@ request.interceptors.response.use(
|
||||
},
|
||||
);
|
||||
|
||||
// 刷新 token 的方法
|
||||
async function refreshToken() {
|
||||
// 刷新接口需要携带当前token在请求头中
|
||||
const response = await request.post('auth/refresh');
|
||||
|
||||
// 返回格式为 { code, data: { token } }
|
||||
return response.data.token;
|
||||
}
|
||||
|
||||
export default request;
|
||||
|
||||
Reference in New Issue
Block a user