Я хочу обновить свой AWS.config.credentials, если срок его действия истек - только тогда, когда пользователь активен на странице.
Если пользователь неактивен более 30 минут, я автоматически выхожу из системы.
Если пользователь активен на странице, я хочу обновить учетные данные в фоновом режиме, чтобы пользователь мог выполнять действия без необходимости повторного входа в систему.
Что я делаю: когда пользователь входит в систему, он сохраняет переменную, которая говорит, что пользователь вошел в систему. У меня есть функция, которая выполняется после входа в систему:
$scope.refreshSession = function() {
// Check if user variable is true (user is logged in)
if ($scope.getLoggedin() == "true") {
// Check if you need to refresh the session - function code below
checkRefresh();
// Set a timer that calls function Timedout() if the user was inactive for 30 minutes
var timeoutTime = 1800000; // Timeout time is 30 minutes
var timeoutTimer = setTimeout(Timedout, timeoutTime);
// Watch for mousedown and keydown actions
$('body').bind('mousedown keydown', function(event) {
// Cancel timer because person is active on page
clearTimeout(timeoutTimer);
// Check if you need to refresh the session - function code below
checkRefresh();
// Restart timer
timeoutTimer = setTimeout(Timedout, timeoutTime);
});
};
function Timedout() {
$('body').unbind('mousedown keydown');
if ($scope.getLoggedin() == "true") {
// Log user out (after 30 minutes of inactivity)
$scope.forcelogout();
}
};
};
Вот функция, которая проверяет необходимость обновления учетных данных:
function checkRefresh() {
var userPool = cognitoService.getUserPool();
var currentUser = userPool.getCurrentUser();
if (currentUser != null) {
currentUser.getSession(function(err, session) {
if (err) {
console.log(err);
}
var refresh_token = session.getRefreshToken();
console.log(AWS.config.credentials.needsRefresh());
if (AWS.config.credentials.needsRefresh()) {
currentUser.refreshSession(refresh_token, (err, session) => {
if (err) {
console.log(err);
}
AWS.config.credentials.refresh((err) => {
if (err) {
console.log(err);
} else {
console.log("TOKEN SUCCESSFULLY UPDATED");
AWSCognito.config.region = 'eu-west-1';
AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: ''
});
}
});
});
}
});
}
};
При этом я проверяю, как только пользователь возвращается на страницу, нужно ли обновлять учетные данные:
window.addEventListener('focus', function() {
checkRefresh();
});
Проблема / Вопрос
Проблема, с которой я столкнулся, заключается в том, что после обновления страницы console.log(AWS.config.credentials.needsRefresh());
показывает true каждый раз (тогда как оно должно быть истинным, если необходимо обновить учетные данные, что должно происходить только один раз в час). Хотя он показывает false (как и ожидалось), когда функция вызывается, когда вы возвращаетесь на страницу или когда фиксируются действия mousedown или keydown.