adminFront/src/kitUI/makeRequest.ts

64 lines
1.7 KiB
TypeScript
Raw Normal View History

import axios from 'axios'
interface MakeRequest {
method?: string
url: string
body?: unknown
useToken?: boolean
contentType?: boolean
}
export default (props: MakeRequest) => {
return (
new Promise(async (resolve, reject) => {
await makeRequest(props)
.then(r => resolve(r))
.catch(r => reject(r))
})
)
}
function makeRequest({
method = "post",
url,
body,
useToken = true,
contentType = false
}: MakeRequest) {
//В случае 401 рефреш должен попробовать вызваться 1 раз
let counterRefresh = true
let headers: any = {}
if (useToken) headers["Authorization"] = localStorage.getItem('AT')
if (contentType) headers["Content-Type"] = "application/json"
return axios({
url: url,
method: method,
headers: headers,
data: body
})
.then(response => {
if (response.data && response.data.accessToken) {
localStorage.setItem('AT', response.data.accessToken)
}
return response
})
.catch(error => {
if (error.response.status == 401 && counterRefresh) {
refresh().then(response => {
if (response.data && response.data.accessToken) localStorage.setItem('AT', response.data.accessToken)
counterRefresh = false
})
} else {
throw error
}
throw error
})
}
function refresh() {
2023-03-13 12:22:54 +00:00
return axios("https://admin.pena.digital/auth/refresh", {
headers: {
"Authorization": localStorage.getItem('AT'),
"Content-Type": "application/json"
}
})
}