react redux Черновик для сквозной авторизации

Набор методов, можно довести до ума, используется локальное хранилище

/**
 * Сквозная авторизация 
 * (напр. для админа в агентство или для агентства в рекламодателя)
 * 
 * @param {int} userId 
 */
export const authAs = (userId) => async (dispatch, getState) => {

    showMainProgress(dispatch);
    try {
        const tokenResponse = await ApiRequest.post(
            'user/change',
            {
                user_id: userId,
            }
        );
        await saveCurrentLoginDataToArrayOfPrevious()(dispatch, getState);

        localStorage.setItem('apiToken', tokenResponse.token);
        ApiRequest.setToken(tokenResponse.token); // устанавливаем токен авторизации клиенту 
        await getAndSetUserData()(dispatch, getState);
        initIntervalsUpdating()(dispatch, getState);

        hideMainProgress(dispatch);

    } catch (error) {
        console.log('ajaxError error:', error);
        showNotification(dispatch, { message: 'Ошибка: Не удалось сменить пользователя!', kind: 'failure' });

        hideMainProgress(dispatch);
    }
};

export const saveCurrentLoginDataToArrayOfPrevious = () => async (dispatch, getState) => {

    console.log('getUserName(getState)', getUserName(getState));
    console.log('getCurrentLocation', getCurrentLocationget(State()));
    return dispatch({
        type: ActionTypes.SAVE_PREVIOUS_AUTH_DATA,
        loginData: {
            login: getUserName(getState()),
            token: localStorage.getItem('apiToken'),
            location: getCurrentLocation(getState()),
        }
    });
};

/**
 * Сквозная авторизация в обратную сторону 
 * (на предыдущий аккаунт, который ранее должен был быть положен в глобальный стейт)
 */
export const authBack = (redirectCallback) => async (dispatch, getState) => {

    showMainProgress(dispatch);

    var prevLoginData = getLastPreviousLoginData(getState());

    try {
        localStorage.setItem('apiToken', prevLoginData.token);
        ApiRequest.setToken(prevLoginData.token); // устанавливаем токен авторизации клиенту
        await popLastLoginDataFromArrayOfPrevious()(dispatch, getState);

        await getAndSetUserData()(dispatch, getState);
        initIntervalsUpdating()(dispatch, getState);

        dispatch({
            type: ActionTypes.SET_LOCATION_AFTER_BACK_LOGIN,
            location: prevLoginData.location,
        });

        // history.pushState(null, '', prevLoginData.location);

        // const customHistory = createBrowserHistory();
        // customHistory.push(prevLoginData.location);

        redirectCallback(prevLoginData.location);
        hideMainProgress(dispatch);
    } catch (error) {
        console.log('ajaxError error:', error);

        hideMainProgress(dispatch);
    }
};

export const popLastLoginDataFromArrayOfPrevious = () => async (dispatch, getState) => {

    console.log('getUserName(getState)', getUserName(getState));
    return dispatch({
        type: ActionTypes.POP_LAST_PREVIOUS_AUTH_DATA,
    });
};


let userBalanceIntervalId = null;


const clearUpdateintervals = () => {
    clearInterval(userBalanceIntervalId);
}