diff --git a/screen-vue/src/utils/request.js b/screen-vue/src/utils/request.js index e7d940e..cee0b4a 100644 --- a/screen-vue/src/utils/request.js +++ b/screen-vue/src/utils/request.js @@ -10,13 +10,19 @@ const service = axios.create({ } }) -const WHITE_LIST_PATHS = ['/userLogin', '/register']; +const WHITE_LIST_PATHS = ['userLogin', 'register']; + +const isInWhiteList = (url) => { + if (!url) return false; + const urlPath = url.split('?')[0]; + const apiName = urlPath.substring(urlPath.lastIndexOf('/') + 1); + return WHITE_LIST_PATHS.includes(apiName); +}; const checkTokenExist = (config) => { - if (WHITE_LIST_PATHS.some(path => config.url?.includes(path))) { + if (isInWhiteList(config.url)) { return true; } - // 非白名单接口检查token const token = localStorage.getItem('token'); if (!token) { handleLoginExpired(); @@ -29,15 +35,18 @@ const checkTokenExist = (config) => { service.interceptors.request.use( (config) => { if (!checkTokenExist(config)) { - return Promise.reject(new Error('未检测到登录凭证,请先登录')); + if (!isInWhiteList(config.url)) { + return Promise.reject(new Error('未检测到登录凭证,请先登录')); + } + return Promise.resolve(config); } return config }, (error) => { console.error('【请求拦截器错误】', error); - return Promise.reject(error) + return Promise.reject(error); } -) +); service.interceptors.response.use( (response) => { @@ -58,6 +67,11 @@ service.interceptors.response.use( return res.data; }, (error) => { + if (error.config && isInWhiteList(error.config.url)) { + ElMessage.error(error.response?.data?.msg || '登录失败,请检查账号密码'); + return Promise.reject(error); + } + if (isLoginExpiredError(error)) { handleLoginExpired(); return Promise.reject(new Error('登录状态已失效,请重新登录')); @@ -82,7 +96,7 @@ service.interceptors.response.use( ElMessage.error(error.response.data?.msg || error.message || '接口请求失败'); return Promise.reject(error); } -) +); function isLoginExpiredError(error) { if (error.response && error.response.status === 401) {