【问题标题】:How to stop Idle.watch() after logging out in AngularJS?在 AngularJS 中注销后如何停止 Idle.watch()?
【发布时间】:2017-03-24 04:28:14
【问题描述】:

我正在使用 Idle.watch() 和 KeepaliveProvider 来检查会话并尝试注销。但是在注销后 Idle.watch() 再次工作并检查会话超时,这在注销后应该不起作用。

这是我的代码

App.js

angular.module('MetricsPortal', [
  'ngAnimate',
  'ui.bootstrap',
  'ui.sortable',
  'ui.router',
  'ngTouch',
  'toastr',
  'smart-table',
  "xeditable",
  'ui.slimscroll',
  'ngJsTree',
  'ngCookies',
  'ngStorage',
  'ngRoute',
  'ngIdle',
  'angular-progress-button-styles',
  'angularUtils.directives.dirPagination', 
  'MetricsPortal.theme',
  'MetricsPortal.pages',
  'MetricsPortal.LifeCycle',
  'MetricsPortal.QBot'
])
 .config(function(IdleProvider, KeepaliveProvider) {
  IdleProvider.idle(5); // 15 min
  IdleProvider.timeout(10);
  KeepaliveProvider.interval(10); // heartbeat every 10 min
 // KeepaliveProvider.http('/api/heartbeat'); // URL that makes sure session is alive
})
.run(function($rootScope, Idle,$sessionStorage,$location,$route) {

  Idle.watch();
  $rootScope.$on('IdleStart', function() {/* Display modal warning or sth */ });
  $rootScope.$on('IdleTimeout', function() {  $rootScope.logout1();

  /* Logout user */ });



});

在控制器中我正在实现注销功能

  (function() {
    'use strict';

angular.module('MetricsPortal.pages.login').controller(
            'LoginCtrl', LoginCtrl);
/** @ngInject */
function LoginCtrl(Idle,$scope, $rootScope, $window, $location,$http,$state, loginService,$cookies,$sessionStorage,$route,toastr,$timeout) {

    $rootScope.loggedIn = false;
    $rootScope.registration = false;
    $rootScope.registereduser = false;
    $rootScope.changeMenu = false;
    $scope.menubar = true;
    $scope.started = false;

     $scope.changeState = function() {
            $rootScope.registration = true;
            $state.go('register');

        }

    $rootScope.logout1= function() {

        if($rootScope.loggedIn){ 

            $scope.logout();

            $scope.started = false;
        }

    }

    $scope.logout=function(){

        location.reload();

        delete $sessionStorage.user;
        delete $sessionStorage.loggedIn;
        delete $sessionStorage.loggedInuserId;
        delete $sessionStorage.role;
        delete $scope.password;
        delete $sessionStorage.lifeCycle;
        delete $sessionStorage.operational;
        delete $sessionStorage.qbot;
        delete $sessionStorage.admin;

         Idle.unwatch();
         $location.path('/');
         $rootScope.loggedIn = false;

    }

    $scope.home=function(){
    if($location.path().split('/').pop() == "dashboard" || 
       $location.path().split('/').pop() == "requirements" || 
       $location.path().split('/').pop() == "testcases" ||
       $location.path().split('/').pop() == "functionalCoverageData" ||
       $location.path().split('/').pop() == "testexecution" ||
       $location.path().split('/').pop() == "defects")  {

         $state.go('dashboard');
         $scope.menubar = true;
         $scope.var1=true;
         $scope.var2=false;
         $scope.var3=false;
    }

    else if($location.path().split('/').pop() == "lifecycle" || 
               $location.path().split('/').pop() == "codeRepo" || 
               $location.path().split('/').pop() == "codeanalysis" ||
               $location.path().split('/').pop() == "build" )   {

                 $state.go('lifecycle');
                 $scope.menubar = false;
                 $scope.var1=false;
                 $scope.var2=true;
                 $scope.var3=false;
        }
    else    {

             $state.go('qbot');
             $scope.menubar = false;
                 $scope.var1=false;
                 $scope.var2=true;
                 $scope.var3=false;
     }
    }

    $scope.hideSideBar=function(){

         $scope.menubar = false;

    }
    $scope.gotoHome=function(){
        $window.localStorage.clear();
        $rootScope.loggedIn = false;
        $rootScope.registereduser = false;
        $rootScope.registration = false;
    }


    $scope.SessionData=function(){   
        $rootScope.loggedInuserId=$sessionStorage.loggedInuserId;
        $rootScope.role=$sessionStorage.role;
        $rootScope.operational=$sessionStorage.operational;
        $rootScope.lifeCycle=$sessionStorage.lifeCycle;
        $rootScope.qbot=$sessionStorage.qbot;

        if($sessionStorage.loggedIn){

            $rootScope= $sessionStorage.user;
            $scope.loggedIn=$sessionStorage.loggedIn;            
              $scope.var1=true;
            }   
    }

        $scope.showGroup = function(userName, password) {
        $scope.userId = userName;
        $scope.password = password;
        if((userName==null || userName=='')&& (password==null || password=='')) {
            $scope.showErrorMsg();
            $rootScope.loggedIn = false;
        }else

        $http.post("./rest/jsonServices/authentication?userId="+$scope.userId +"&password="+$scope.password).success(function(data) {
            var landingPage = '';
            $scope.inValidCredentials = false;
            $rootScope.role = data.role;

            if(data!=null && data.accessible == true){

                $sessionStorage.user = JSON.stringify(data);             
                $sessionStorage.loggedIn = true;
                $rootScope.started=true;

                $sessionStorage.role=data.role;
                $sessionStorage.loggedInuserId = userName;
                $sessionStorage.operational=data.operational;
                $sessionStorage.lifeCycle=data.lifeCycle;
                $sessionStorage.qbot=data.qbot;
                $sessionStorage.admin=data.admin;


                $rootScope.loggedIn = true; 
                $rootScope.role=$sessionStorage.role;
                $rootScope.loggedInuserId=$sessionStorage.loggedInuserId;
                $rootScope.menuType=data.defaultMenuType;


                $rootScope.operational=$sessionStorage.operational;
                $rootScope.lifeCycle=$sessionStorage.lifeCycle;
                $rootScope.qbot=$sessionStorage.qbot;
                $rootScope.admin=$sessionStorage.admin;

                if($rootScope.admin){
                       $state.go('admin');
                       $scope.menubar = false;
                   }
                else if($rootScope.operational){
                   $state.go('dashboard');
                   $scope.var1=true;
               }else if ($scope.lifeCycle){
                   $state.go('lifecycle');
                   $scope.menubar = false;
               }else if ($rootScope.qbot){
                   $scope.menubar = false;
                    $state.go('qbot')
               } 

            }else if(data!=null && data.accessible == false){
                $rootScope.registereduser = true;
                $rootScope.loggedIn = false;

            }

            else{ 
                alert("Invalid Credentials");
                data.message="Invalid UserID or Password";
                $scope.error=data.message;
            }

        }).error(function(data){

            $scope.showErrorMsg();

        });

             $scope.updateSideBar=function(role,menuType){

                           /*$http.get("./rest/jsonServices/getMenuItems?role="+role+"&menuType="+menuType).success(function (response) {
                               $rootScope.menus=response;                      
                               $scope.childmethod(response);


                                 }) ;    
                           */

                           if(menuType == "qbot"){
                             $scope.menubar = false;
                             $scope.var1=false;
                             $scope.var2=false;
                             $scope.var3=true;
                           }
                           else if(menuType=="lifecycle")
                               {
                             $scope.menubar = false;
                             $scope.var1=false;
                             $scope.var2=true;
                             $scope.var3=false;
                               }
                           else{
                             $scope.menubar = true;
                             $scope.var1=true;
                             $scope.var2=false;
                             $scope.var3=false;
                           }

             };
       /* $scope.childmethod = function(response) {

             $rootScope.$emit("CallParentMethod", response);
          };*/


             $scope.showErrorMsg = function() {
              toastr.error("UserId and Password didn't match.Please Enter Valid Credentials", 'Error');
            };

}



}


})();

【问题讨论】:

    标签: angularjs session


    【解决方案1】:

    您可以使用 Idle 的 unwatch 方法停止观看。用法是Idle.unwatch();。将此添加到注销功能中。检查空闲取消监视功能here

    【讨论】:

    • 我使用了 Idle.unwatch();在注销功能,但它不工作。
    • 以上我已经更新了完整的App.js和Controller代码
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2023-03-25
    • 2017-02-23
    • 2018-10-20
    相关资源
    最近更新 更多