2016-04-15 4 views
5

Привет, я новичок в ионной структуре. Я использую сессионный менеджер в ионном режиме. Но я хочу, чтобы пропустить страницу входа, если пользователь уже вошел в систему.как пропустить страницу входа, если пользователь уже вошел в систему ionic

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; 
      } 


     } 
    }) 

Я попытался существующие StackOverflow ответы. Но не работает. пожалуйста, помогите мне, где я ошибаюсь.

+0

Я предполагаю, что использование свойства «разрешение» в состоянии «app.login» сделает трюк – Yogesh

ответ

0

Создайте новый контроллер и новое состояние, которое называется 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

Спасибо, но все равно не работает. –

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'; 
     } 

    }); 


});