credentials.needsRefresh () имеет значение true при каждом обновлении страницы, а не только один раз в час - PullRequest
0 голосов
/ 12 июня 2019

Я хочу обновить свой 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...