Как реализовать автоматическое обновление токенов с помощью активного редуктора - PullRequest
1 голос
/ 11 февраля 2020

Эта ситуация возникает, когда пользователь вводит много информации в какое-либо поле или форму, после чего срок действия токена истекает. В этом случае пользователь теряет всю информацию. Поэтому мы должны реализовать функцию автоматического обновления токена

. Вот конфигурация промежуточного программного обеспечения

const middlewareConfig = {
  interceptors: {
    request: [
      ({ getState, dispatch }, config) => {
        return config;
      },
    ],
    response: [
      {
        error: ({ getState, dispatch, getSourceAction }, error) => {
          if (error.response.status === 401) {
            dispatch(actions.setAuthErrorStatus());
          }
          if (error.response.headers.hasOwnProperty('sso-authenticate')) {
            redirectToLocationUrl(error.response.headers["sso-authenticate"])
          } else if (error.response.config.method === 'get') {
            if (url_config.DEFAULT_CLIENT === 'local_proxy') {
              cancelEventNotification(error);
            }
          }
          return Promise.reject(error);
        },
        success: ({ dispatch }, response) => {
          redirectToLocationUrl(response.headers.location);
          return response;
        },
      },
    ],
  },
  returnRejectedPromiseOnError: false,
};

. Это файл, в котором хранилище создает

import React from 'react';
import { Provider } from 'react-redux';
import { applyMiddleware, createStore } from 'redux';
import { multiClientMiddleware } from 'redux-axios-middleware';
import { composeWithDevTools } from 'redux-devtools-extension';
import reduxThunk from 'redux-thunk';

import { clients } from './middlewares/axiosMiddleware/clients';
import config from './middlewares/axiosMiddleware/config';
import reducers from './reducers';

interface IRootChildren {
  children: JSX.Element;
}

const middlewares = [reduxThunk, multiClientMiddleware(clients, config)];
const store = createStore(reducers, composeWithDevTools(applyMiddleware(...middlewares)));

export default ({ children }: IRootChildren) => {
  return (
    <Provider store={ store }>
      { children }
    </Provider>
  );
};
.
...