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
- 10683 reads