authentication.jsКомпоненты: USER_LOGIN_BEGIN, USER_LOGIN_SUCCESS, USER_LOGIN_FAILURE
Используемые хуки: rLoginFailure, rLoginBegin, rLoginSuccess, rLoginBegin
Экспорты: USER_LOGIN_BEGIN, USER_LOGIN_SUCCESS, USER_LOGIN_FAILURE, userLoginBegin, userLoginSuccess, userLoginFailure, loadUserStatus, login
Импорты из: ../utilities/rest
import { getServiceURL, handleHTTPErrors } from '../utilities/rest';
export const USER_LOGIN_BEGIN = 'USER_LOGIN_BEGIN';
export const USER_LOGIN_SUCCESS = 'USER_LOGIN_SUCCESS';
export const USER_LOGIN_FAILURE = 'USER_LOGIN_FAILURE';
export const userLoginBegin = () => ({
type: USER_LOGIN_BEGIN,
});
export const userLoginSuccess = (user, version, buildTimestamp, alertMessage) => ({
type: USER_LOGIN_SUCCESS,
payload: {
user,
version,
buildTimestamp,
alertMessage,
},
});
export const userLoginFailure = (error) => ({
type: USER_LOGIN_FAILURE,
payload: {
error,
},
});
const catchError = (dispatch) => (error) => dispatch(userLoginFailure(error.message));
export const loadUserStatus = () => (dispatch) => {
dispatch(userLoginBegin());
return fetch(
getServiceURL('userStatus'),
{
method: 'GET',
credentials: 'include',
},
)
.then(handleHTTPErrors)
.then((response) => response.json())
.then(({ userData, systemData, alertMessage }) => {
dispatch(userLoginSuccess(
userData,
systemData.version,
systemData.buildTimestamp,
alertMessage,
));
})
.catch(() => {
const { pathname, search } = window.location;
const href = pathname + search;
if (!pathname.startsWith('/react/public/login')
// /react/public/datatransfer/ — особый случай, когда пользователь не авторизован.
// Форма входа возвращается через передачу данных.
&& !pathname.startsWith('/react/public/datatransfer/')) {
// установить URL для перенаправления после входа:
window.location.href = `/react/public/login?url=${encodeURIComponent(href)}`;
}
catchError(dispatch)({ message: undefined });
});
};
export const login = (username, password, keepSignedIn) => (dispatch) => {
dispatch(userLoginBegin());
return fetch(
getServiceURL('/rsPublic/login'),
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
username,
password,
stayLoggedIn: keepSignedIn,
}),
credentials: 'include',
},
)
.then(handleHTTPErrors)
.then(() => loadUserStatus()(dispatch))
.catch(catchError(dispatch));
};
e2061d7db UserPrefDao: подавление лога ошибок для старых TimesheetPrefData. Улучшена обработка входа: перенаправление на исходный URL после входа. cc0eb7b56 DataTransferPublicPagesRest: не показывать токен доступа в форме входа. Исправлен вход. 7c88abd0f wip обновление зависимостей bbd81edc3 es-lint, новые версии js. 4f5a06d6f AppVersion удалён. Добавлена информация о Git в ProjectForgeVersion.