Skip to content

Instantly share code, notes, and snippets.

Revisions

  1. @FilipBartos FilipBartos revised this gist May 19, 2020. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions axios-response-interceptor.js
    Original file line number Diff line number Diff line change
    @@ -12,10 +12,10 @@ function addSubscriber(callback) {
    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(fetchAccessToken()).then((access_token) => {
  2. @FilipBartos FilipBartos renamed this gist May 23, 2018. 1 changed file with 1 addition and 4 deletions.
    5 changes: 1 addition & 4 deletions gistfile1.txt → axios-response-interceptor.js
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,3 @@
    ```javascript
    let isAlreadyFetchingAccessToken = false
    let subscribers = []

    @@ -34,6 +33,4 @@ axios.interceptors.response.use(function (response) {
    return retryOriginalRequest
    }
    return Promise.reject(error)
    })

    ```
    })
  3. @FilipBartos FilipBartos created this gist May 23, 2018.
    39 changes: 39 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    ```javascript
    let isAlreadyFetchingAccessToken = false
    let subscribers = []

    function onAccessTokenFetched(access_token) {
    subscribers = subscribers.filter(callback => callback(access_token))
    }

    function addSubscriber(callback) {
    subscribers.push(callback)
    }

    axios.interceptors.response.use(function (response) {
    return response
    }, function (error) {
    const { config, response: { status } } = error
    const originalRequest = config

    if (status === 401) {
    if (!isAlreadyFetchingAccessToken) {
    isAlreadyFetchingAccessToken = true
    store.dispatch(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)
    })

    ```