64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
import axios from '../../../axios/index.js'
|
|
import store from '../../../../store/store.js'
|
|
|
|
// Token Refresh
|
|
let isAlreadyFetchingAccessToken = false
|
|
let subscribers = []
|
|
|
|
function onAccessTokenFetched (access_token) {
|
|
subscribers = subscribers.filter(callback => callback(access_token))
|
|
}
|
|
|
|
function addSubscriber (callback) {
|
|
subscribers.push(callback)
|
|
}
|
|
|
|
export default {
|
|
init () {
|
|
axios.interceptors.response.use(function (response) {
|
|
return response
|
|
}, function (error) {
|
|
// const { config, response: { status } } = error
|
|
const { config, response } = error
|
|
const originalRequest = config
|
|
|
|
// if (status === 401) {
|
|
if (response && response.status === 401) {
|
|
if (!isAlreadyFetchingAccessToken) {
|
|
isAlreadyFetchingAccessToken = true
|
|
store.dispatch('auth/fetchAccessToken')
|
|
.then((access_token) => {
|
|
isAlreadyFetchingAccessToken = false
|
|
onAccessTokenFetched(access_token)
|
|
})
|
|
}
|
|
|
|
const retryOriginalRequest = new Promise((resolve) => {
|
|
addSubscriber(access_token => {
|
|
originalRequest.headers.Authorization = `Bearer ${access_token}`
|
|
resolve(axios(originalRequest))
|
|
})
|
|
})
|
|
return retryOriginalRequest
|
|
}
|
|
return Promise.reject(error)
|
|
})
|
|
},
|
|
login (email, pwd) {
|
|
return axios.post('/api/auth/login', {
|
|
email,
|
|
password: pwd
|
|
})
|
|
},
|
|
registerUser (name, email, pwd) {
|
|
return axios.post('/api/auth/register', {
|
|
displayName: name,
|
|
email,
|
|
password: pwd
|
|
})
|
|
},
|
|
refreshToken () {
|
|
// return axios.post('/api/auth/refresh-token', {accessToken: localStorage.getItem('access_toKen')})
|
|
}
|
|
}
|