Документация по расширению AWS показывает
let session = Auth.currentSession();
// CognitoUserSession => { idToken, refreshToken, accessToken }
чтобы получить текущий сеанс, который работает нормально.
Однако я не уверен, как реализовать это в моем приложении React с Redux. Все данные в магазине исчезают, когда пользователь перезагружает веб-страницу вместе со всеми пользовательскими интерфейсами для вошедшего в систему пользователя.
Я хочу сохранить этап входа в систему, даже если пользователь обновит страницу, пока CognitoUserSession действителен и, возможно, сохранит некоторые данные, которые у меня уже есть в магазине.
Как лучше всего это реализовать?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


aws-ampify активно использует localStorage. Ты тоже можешь.
Вы также можете использовать sessionStorage, это то же самое, за исключением того, что все удаляется после закрытия окна.
Если вы хотите что-то спасти:
window.localStorage.setItem(“itemKey”, “itemString”);
Чтобы вернуть его:
const item = window.localStorage.getItem(“itemKey”);
Обратите внимание: если вы хотите сохранить объект, вам нужно JSON.stringify его, а затем JSON.parse его, когда вы его извлекаете. Вы можете хранить только строки.
Как правило, я бы не стал хранить конфиденциальную информацию в localStorage.
Кроме того, я обычно запускаю какую-либо проверку сеанса на определенных компонентах, когда они монтируются или обновляются. Например, вы можете добавить:
if (!this.props.session) { // stored session object in redux
Auth.currentSession().then((session) => {
handleSession({ session }); // redux action to store session
});
}
Идея такова: если страница обновляется, компоненты с этими проверками сеанса будут монтироваться, выполнят оператор if, указанный выше, поймут, что сеанс пуст, и попытаются получить новый объект сеанса из Auth. Если Auth возвращает ошибку, потому что пользователь больше не аутентифицирован, вы можете добавить дополнительную логику для перенаправления на экран входа в систему.
Еще раз спасибо за помощь! Не могли бы вы взглянуть на это тоже? stackoverflow.com/questions/50580499/… :)