fix some bugs
This commit is contained in:
+69
-16
@@ -3,6 +3,7 @@ import { baseURL as fallbackBaseURL } from '@/themeConfig'
|
||||
import type {AxiosRequestConfig, AxiosResponse} from 'axios'
|
||||
import axios from 'axios'
|
||||
import {getToken, removeToken} from "@/utils";
|
||||
import { findStoredAuthToken } from '@/utils/authToken';
|
||||
import router from "@/router";
|
||||
import {get} from 'lodash'
|
||||
import {message} from "ant-design-vue";
|
||||
@@ -25,6 +26,58 @@ const _axios = axios.create({
|
||||
headers,
|
||||
})
|
||||
|
||||
let sessionVerifyTimer: ReturnType<typeof setTimeout> | null = null
|
||||
let sessionVerifyInFlight = false
|
||||
|
||||
function requestPath(config: { url?: string; baseURL?: string } | undefined): string {
|
||||
const raw = String(config?.url ?? '')
|
||||
if (raw.startsWith('http')) {
|
||||
try {
|
||||
return new URL(raw).pathname
|
||||
} catch {
|
||||
return raw
|
||||
}
|
||||
}
|
||||
return raw
|
||||
}
|
||||
|
||||
async function logoutToLogin() {
|
||||
removeToken()
|
||||
if (router.currentRoute.value.name !== 'login') {
|
||||
await router.push({ name: 'login' })
|
||||
}
|
||||
}
|
||||
|
||||
function scheduleSessionVerify() {
|
||||
if (sessionVerifyTimer) {
|
||||
return
|
||||
}
|
||||
|
||||
sessionVerifyTimer = setTimeout(async () => {
|
||||
sessionVerifyTimer = null
|
||||
if (sessionVerifyInFlight) {
|
||||
return
|
||||
}
|
||||
|
||||
const token = findStoredAuthToken()
|
||||
if (!token) {
|
||||
return
|
||||
}
|
||||
|
||||
sessionVerifyInFlight = true
|
||||
try {
|
||||
await _axios.get('/customer/me', {
|
||||
headers: { Authorization: `Bearer ${token}` },
|
||||
meta: { errorMessage: 'none' },
|
||||
})
|
||||
} catch {
|
||||
await logoutToLogin()
|
||||
} finally {
|
||||
sessionVerifyInFlight = false
|
||||
}
|
||||
}, 2000)
|
||||
}
|
||||
|
||||
_axios.interceptors.request.use(
|
||||
(config) => {
|
||||
const runtimeBaseURL = getConfigApp('node_server')
|
||||
@@ -54,24 +107,24 @@ _axios.interceptors.response.use(
|
||||
return response.data
|
||||
},
|
||||
async function (error) {
|
||||
console.log('this is axios error', error)
|
||||
if (error.response.data && error.response.data.message) {
|
||||
checkStatus(error.response.data.message, error.response.status, error.config)
|
||||
const response = error.response
|
||||
const config = error.config
|
||||
|
||||
if (response?.data?.message && response.status !== 401) {
|
||||
checkStatus(response.data.message, response.status, config)
|
||||
}
|
||||
|
||||
//console.log('this is error on interceptors.response', error.config.meta)
|
||||
/* if (error.response && (error.response.status == 401 || error.response.status == 400)) {
|
||||
//debugger
|
||||
removeToken()
|
||||
router.push({ name: 'login' })
|
||||
}*/
|
||||
if (error.response && error.response.status == 401) {
|
||||
///removeToken()
|
||||
console.log('error')
|
||||
removeToken()
|
||||
// router.push({ name: 'login' })
|
||||
await router.push({name: 'login'})
|
||||
} else if (error.response && error.response.status == 403) {
|
||||
if (response?.status === 401) {
|
||||
const hadAuth = Boolean(config?.headers?.Authorization)
|
||||
if (hadAuth) {
|
||||
const path = requestPath(config)
|
||||
if (path.includes('/customer/me')) {
|
||||
await logoutToLogin()
|
||||
} else {
|
||||
scheduleSessionVerify()
|
||||
}
|
||||
}
|
||||
} else if (response?.status === 403) {
|
||||
message.error('شما دسترسی لازم برای انجام این عملیات را ندارید')
|
||||
} else if (error.response && error.response.status == 422) {
|
||||
// message.error(error.response.data?.message)
|
||||
|
||||
Reference in New Issue
Block a user