Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let isAlreadyFetchingAccessToken = false;
  2. let subscribers = [];
  3.  
  4. function onAccessTokenFetched(accessToken) {
  5.   subscribers = subscribers.filter(callback => callback(accessToken));
  6. }
  7.  
  8. function addSubscriber(callback) {
  9.   subscribers.push(callback);
  10. }
  11.  
  12. $axios.interceptors.response.use(
  13.   response => {
  14.     return response;
  15.   },
  16.   error => {
  17.     const {
  18.       config,
  19.       response: { status }
  20.     } = error;
  21.     const originalRequest = config;
  22.  
  23.     if (status === 401) {
  24.       if (!isAlreadyFetchingAccessToken) {
  25.         isAlreadyFetchingAccessToken = true;
  26.  
  27.         localforage.getItem('user').then(user => {
  28.           const req = {
  29.             accessToken: user.accessToken,
  30.             refreshToken: user.refreshToken
  31.           };
  32.  
  33.           $axios.post('tokens/refresh', req).then(response => {
  34.             user.accessToken = response.data.accessToken;
  35.  
  36.             localforage.setItem('user', user).then(value => {
  37.               store.commit('SET_ACCESS_TOKEN', value.accessToken);
  38.  
  39.               isAlreadyFetchingAccessToken = false;
  40.               onAccessTokenFetched(user.accessToken);
  41.             });
  42.           });
  43.         });
  44.       }
  45.  
  46.       const retryOriginalRequest = new Promise(resolve => {
  47.         addSubscriber(accessToken => {
  48.           originalRequest.headers.Authorization = 'Bearer ' + accessToken;
  49.           resolve($axios(originalRequest));
  50.         });
  51.       });
  52.       return retryOriginalRequest;
  53.     }
  54.     return Promise.reject(error);
  55.   }
  56. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement