Мониторинг действий пользовательского интерфейса AngularJs и сохранение изменений в localStorage - PullRequest
0 голосов
/ 31 августа 2018

У меня возникла проблема с моим текущим назначением: выйти из системы, если пользователь бездействует (никаких действий не выполняется) в течение 15 минут

Я использую tokens.expires date и знаю некоторые функции AngularJs Idle, но я не могу использовать их там должным образом, потому что уже есть один работающий сервис, который запускается при запуске проекта и каждую минуту проверяет, произошла ли ошибка (до * 1005) *) и если refreshToken необходимо (будет продлено)

Я думал о решении сделать сервис с $watch и отслеживать действия пользовательского интерфейса. При каждом пользовательском интерфейсе действие будет возобновлено с текущим token.expires временем и сохранится в localStorage

В случае, если не было выполнено никаких действий, даже если токен все еще действителен, через 15 минут пользователь выйдет из системы

Я написал этот код

(function (angular, moment) {
    'use strict';

    angular
        .module('app')
        .factory('actionClickService', actionClickService);

    actionClickService.$inject = [
        'authenticationService',
        '$rootScope'
    ];

    function actionClickService(authenticationService, $rootScope) {
        var actionClick = {
            endsAt: ''
        };

        var KEY = {
            TOKENS: 'tokens',
            USER: 'user',
            ACTION_CLICK: 'actionClick'
        };

        $rootScope.$watch($window, function () {
                if (authenticationService.isAuthenticated() && authenticationService.getUser()) {
                    var tokens = JSON.parse($window.localStorage.getItem(KEY.TOKENS));
                    var getActionClick = JSON.parse($window.localStorage.getItem(KEY.ACTION_CLICK));

                    if (!getActionClick) {
                        actionClick.endsAt = tokens.expires;
                        $window.localStorage.setItem(KEY.ACTION_CLICK, JSON.stringify(actionClick));
                    } else if (moment() - moment(getActionClick.endsAt) > 0) {
                        authenticationService.logout();
                    } else {
                        actionClick.endsAt = token.expires;
                        $window.localStorage.setItem(KEY.ACTION_CLICK, JSON.stringify(actionClick));
                    }
                }
            }
        );
    }

})(window.angular, window.moment);

Сначала мой сервис вообще не был обнаружен После ввода этой службы в tokenRefreshService (для refreshToken) моя служба начинает обнаруживаться, но происходит сбой $window

Может быть, я двигаюсь не в том направлении. Буду признателен за вашу помощь

...