
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import axios from 'axios';
import store from "../../views/pages/AppStore";
const apiClient = axios.create({
headers: {
'Content-Type': 'application/json; charset=UTF-8',
}
});
apiClient.interceptors.request.use(
config => {
config.headers.Authorization = store.state.authorization; // 요청 시 AccessToken 추가
return config;
},
error => {
return Promise.reject(error);
}
)
apiClient.interceptors.response.use(
response => {
console.log('Response Status:', response.status); // 응답 상태 출력
return response;
},
async error => {
console.log('Error Response:', error.response.data); // 오류 응답 데이터 출력
console.log('Error Status:', error.response.status); // 오류 상태 출력
if (error.response.status == 403 && error.response.data.message == '접근 권한이 없습니다.') {
window.history.back();
}
const originalReq = error.config;
// 토큰의 만료기간이 끝난경우
if (error.response.status == 401 && error.response.data.message == '로그인 시간이 만료되었습니다.' && !originalReq._retry) {
originalReq._retry = true; // 재요청 시도(한번만 실행)
try {
const res = await axios.post('/refresh/tknReissue.json', {});
store.commit('setAuthorization', res.headers.authorization); // 새로 발급 받은 AccessToken 저장
originalReq.headers.Authorization = store.state.authorization; // 새로 발급 받은 AccessToken을 기존 요청에 추가
/** jwt토큰 디코딩 **/
const base64String = store.state.authorization.split('.')[1];
const base64 = base64String.replace(/-/g, '+').replace(/_/g, '/');
const jsonPayload = decodeURIComponent(atob(base64).split('').map(c => {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const mbr = JSON.parse(jsonPayload);
// const mbr = JSON.parse(decodeURIComponent(escape(window.atob(base64String)))); // jwt claim 추출
store.commit("setUserNm", mbr.userNm);
store.commit('setRoles', mbr.roles);
/** jwt토큰 디코딩 **/
return apiClient(originalReq); // 원래 요청 재시도 /pathname + search
} catch (refreshError) {
const redirect = window.location.pathname + window.location.search;
sessionStorage.setItem("redirect", redirect);
alert('세션이 종료되었습니다.\n로그인을 새로 해주세요.');
store.commit("setStoreReset");
window.location = '/login.page';
return Promise.reject(refreshError);
}
}
return Promise.reject(error);
}
)
export default apiClient;