import api from './auth.api' import jwt from '../service/jwt' //참조: https://www.bezkoder.com/vue-refresh-token/ const setup = (store) => { //API Request 전 처리용 api.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' //Request 처리용 api.interceptors.request.use( (config) => jwt.getAuthorizationHeader(config), (error) => { // Do something with request error Promise.reject(error) } ) //AccessToken이 만료된경우 다시 받기위한 함수 const reloadAccessToken = async (originalConfig) => { // Access Token이 expired,오류로 인한 response 401 답볍을 받은경우 originalConfig._retry = true try { //Refresh Token으로 다시 Access Token 재생성 후 로그인 다시하라고 오류보냄 await api .post('/auth/reload', { refresh_token: jwt.getRefreshToken() }) .then((rs) => { store.dispatch('reload', rs.data.access_token) }) return api(originalConfig) } catch (_error) { return Promise.reject(_error) } } //Response 처리용 api.interceptors.response.use( (response) => { console.log('AUTH API Call 성공=>' + response) return response }, async (err) => { // Do something with response error const originalConfig = err.config if (originalConfig.url !== '/auth/login' && err.response) { if (err.response.status === 401 && !originalConfig._retry) { return await reloadAccessToken(originalConfig) } } return Promise.reject(err) } ) } export default setup