Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let isAlreadyFetchingAccessToken = false;
- let subscribers = [];
- function onAccessTokenFetched(accessToken) {
- subscribers = subscribers.filter(callback => callback(accessToken));
- }
- function addSubscriber(callback) {
- subscribers.push(callback);
- }
- $axios.interceptors.response.use(
- response => {
- return response;
- },
- error => {
- const {
- config,
- response: { status }
- } = error;
- const originalRequest = config;
- if (status === 401) {
- if (!isAlreadyFetchingAccessToken) {
- isAlreadyFetchingAccessToken = true;
- localforage.getItem('user').then(user => {
- const req = {
- accessToken: user.accessToken,
- refreshToken: user.refreshToken
- };
- $axios.post('tokens/refresh', req).then(response => {
- user.accessToken = response.data.accessToken;
- localforage.setItem('user', user).then(value => {
- store.commit('SET_ACCESS_TOKEN', value.accessToken);
- isAlreadyFetchingAccessToken = false;
- onAccessTokenFetched(user.accessToken);
- });
- });
- });
- }
- const retryOriginalRequest = new Promise(resolve => {
- addSubscriber(accessToken => {
- originalRequest.headers.Authorization = 'Bearer ' + accessToken;
- resolve($axios(originalRequest));
- });
- });
- return retryOriginalRequest;
- }
- return Promise.reject(error);
- }
- );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement