Files
asco_admin/src/http/requests/auth/jwt/index.js
T
2021-11-29 12:05:55 +03:30

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')})
}
}