54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
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
|