react redux Черновик для сквозной авторизации
Primary tabs
Набор методов, можно довести до ума, используется локальное хранилище
/** * Сквозная авторизация * (напр. для админа в агентство или для агентства в рекламодателя) * * @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); }
- Log in to post comments
- 10195 reads