如何跳过登录页面,如果用户已经登录在离子

问题描述:

嗨,我是新的离子框架。我在离子中使用会话管理器。但我想跳过登录页面,如果用户已经登录。如何跳过登录页面,如果用户已经登录在离子

app.js

angular.module('grocery', ['ionic', 'grocery.controller', 'ngCordova', 'ngCordovaOauth']) 

.run(function($ionicPlatform, $cordovaSQLite, $cordovaToast, $rootScope, mainItemsList, $state) { 
    $ionicPlatform.ready(function() { 
     if (window.cordova && window.cordova.plugins.Keyboard) { 

      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 

      stops the viewport 
      // from snapping when text inputs are focused. Ionic handles this internally for 
      // a much nicer keyboard experience. 
      cordova.plugins.Keyboard.disableScroll(true); 
     } 
     if (window.StatusBar) { 
      StatusBar.styleDefault(); 
     } 

    }); 


}); 


$rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl) { 
    if (mainItemsList.isLoggedIn() != true) { 
     $state.go('app.login'); 
    } 



}) 


.config(function($stateProvider, $urlRouterProvider) { 

    $stateProvider 
     .state('app', { 
      url: "/app", 
      abstract: true, 
      templateUrl: "templates/navigationDrawer.html", 
      controller: 'AppCtrl' 
     }) 

    .state('app.masterList', { 
     url: "/masterList", 
     views: { 
      'menuContent': { 
       templateUrl: "templates/masterList.html", 
       controller: 'indexCtrl' 
      } 
     } 
    }) 


    .state('app.login', { 
     url: "/login", 
     views: { 
      'menuContent': { 
       templateUrl: "templates/login.html", 
       controller: 'loginCtrl' 
      } 
     } 
    }) 

    .state('app.register', { 
     url: "/register", 
     views: { 
      'menuContent': { 
       templateUrl: "templates/register.html", 
       controller: 'registerCtrl' 
      } 
     } 
    }) 


    $urlRouterProvider.otherwise("/app/masterList"); 


}); 


angular.module('grocery.services', []) 
    .factory('mainItemsList', function($cordovaSQLite, $cordovaToast, $cordovaPreferences) { 
     return { 
      isLoggedIn: function(sessionEmail) { 

       $cordovaPreferences.store('email', sessionEmail).success(function(value) { 
         //$cordovaToast.showShortTop('stored'); 
        }) 
        .error(function(error) { 
         $cordovaToast.showShortTop("Error " + error); 
        }) 


       return true; 
      } 


     } 
    }) 

我试图现有计算器的答案。但不工作。请帮助我,我错了。

+0

我想在'app.login'状态中使用'resolve'属性将会诀窍 – Yogesh

创建一个新的控制器和一个名为autologin的新状态。使其成为默认状态。在autologin控制器中,检查用户是否已经登录。如果他是,重定向到某个页面。如果他不是,则重定向到登录。

.state('app.autologin', { 
    url: "/autologin", 
    controller: 'autologinCtrl' 
    }) 

$urlRouterProvider.otherwise("/app/autologin"); 

控制器:

angular.module('grocery').controller('autologinCtrl, function($scope, $state){ 
    //check if user is logged in 
    if (userLoggedIn){ 
     state.go('app.masterList'); 
    } else { 
     state.go('app.login'); 
    } 
}); 
+0

感谢您的快速响应。但它不起作用。 –

+0

您还需要摆脱$ rootScope。$ on('$ locationChangeStart'...因为它会干扰 – fikkatra

+0

谢谢,但仍然无法正常工作。 –

如果您是这样的逻辑添加新controller,有将是pages.So之间忽隐忽现处理这个机会利用$urlRouterProvider

.config(function($stateProvider, $urlRouterProvider, mainItemsList) { 
    $stateProvider 
     .state('app', { 
      url: "/app", 
      abstract: true, 
      templateUrl: "templates/navigationDrawer.html", 
      controller: 'AppCtrl' 
     }) 

    .state('app.masterList', { 
      url: "/masterList", 
      views: { 
       'menuContent': { 
        templateUrl: "templates/masterList.html", 
        controller: 'indexCtrl' 
       } 
      } 
     }) 
     .state('app.login', { 
      url: "/login", 
      views: { 
       'menuContent': { 
        templateUrl: "templates/login.html", 
        controller: 'loginCtrl' 
       } 
      } 
     }) 

    .state('app.register', { 
     url: "/register", 
     views: { 
      'menuContent': { 
       templateUrl: "templates/register.html", 
       controller: 'registerCtrl' 
      } 
     } 
    }); 
    // if none of the above states are matched, use this as the fallback 
    $urlRouterProvider.otherwise(function() { 
     var logged = mainItemsList.isLoggedIn(); 
     // Check User logined or not 
     if (logged != true) { 
      return 'app.login'; 
     } else { 
      return 'app.masterList'; 
     } 

    }); 


});