vue2_frontend/src/store/authIterceptors.js
2022-09-13 20:22:29 +09:00

47 lines
1.6 KiB
JavaScript

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