Поддерживать активный сеанс в Угловом js (ionic framework)

Я реализую APP, у которого есть экран logeo (это уже я реализовал). Сейчас, когда я хочу сделать он состоит в том, чтобы поддерживать активный сеанс, потому что, когда я приуменьшаю app или закрываю ее и открыв ее всегда он возвращает меня в ЭКРАН LOGIN.

То, что я реализовывал, состоит в том, чтобы использовать базу данных SQLITE (хотя, который не является рекомендуемым использовать, но не, что другая форма делать), что сохраняет состояние сеанса. если он равен в SESION_ACTIVA, он является другим экраном, но если он не показывает мне экран login.

Это мой код:

APP.js

.run(function($ionicPlatform, $cordovaSQLite,$state) {//paso 2 agrego cordovaSqlite
  $ionicPlatform.ready(function() {
    if(window.cordova && window.cordova.plugins.Keyboard) {
      // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
      // for form inputs)
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);

      // Don't remove this line unless you know what you are doing. It 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);
      db = $cordovaSQLite.openDB({ name: 'tuto.db' });//paso 3 creo  la BD
      $cordovaSQLite.execute(db,"CREATE TABLE IF NOT EXISTS tutoria (id integer primary key, estado text)");
      //creo la tabla personas


      var query = "SELECT estado FROM tutoria";
      $cordovaSQLite.execute(db,query).then(function(result) {
        for ( j=0; j < result.rows.length; j++) { 
          if(result.rows.item(j).estado=="Sesion_Activa"){
            $state.go('tabsEst.perfilEstudiante'); 
          }                         
        }
      });
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }

  });
})

И это мой controller:

ServUsuario.servicioUs($scope.data.username,$scope.data.password).success(function(data){
      $scope.datos=data.token; //ingreso al token del json
      if($scope.datos=='true' && $scope.rol=='docente') {//si el token es true ingresa si no popUp de error
        $rootScope.cedula=data.persona.identificacion;
        $rootScope.pNombre=data.persona.primerNombre;
        $rootScope.NombreDoc=$rootScope.pNombre.substring(0, 1);//variable para mostrar en perfil de docente
        $rootScope.sNombre=data.persona.segundoNombre;
        $rootScope.pApellido=data.persona.primerApellido;
        $rootScope.sApellido=data.persona.segundoApellido;
        //PASO 4 SQLITE BASE DE DATOS
        var query = "INSERT INTO tutoria (estado) VALUES (?)";
        $cordovaSQLite.execute(db,query,["Sesion_Activa"]).then(function(result) {
          //alert("ID -> " + result.insertId);
        }, function(error) {
          //alert('error jj');
        });
        //FIN PASO 4 SQLITE BASE DE DATOS  
        $state.go('tabs.perfilDocente');
      } 
      else {
        if($scope.datos=='true' && $scope.rol=='estudiante') {//si el token es true ingresa si no popUp de error
          $rootScope.cedula=data.persona.identificacion;//las variables con rootscope tb pueden ser llamadas con scope.cedula x ej.
          $rootScope.pNombre=data.persona.primerNombre;
          $rootScope.NombreEst=$rootScope.pNombre.substring(0, 1);//variable para mostrar en perfil de estudiante
          $rootScope.sNombre=data.persona.segundoNombre;
          $rootScope.pApellido=data.persona.primerApellido;
          $rootScope.sApellido=data.persona.segundoApellido; 
          //PASO 4 SQLITE BASE DE DATOS
          var query = "INSERT INTO tutoria (estado) VALUES (?)";
          $cordovaSQLite.execute(db,query,["Sesion_Activa"]).then(function(result) {
            //alert("ID -> " + result.insertId);
          }, function(error) {
            //alert('error jj');
          });
          //FIN PASO 4 SQLITE BASE DE DATOS 
          $state.go('tabsEst.perfilEstudiante');
        }else{
          var alertPopup = $ionicPopup.alert({
            title: 'Usuario o password incorrectos',
            template: 'Por favor intenta de nuevo!'
          });
        }        
      }
    })
    .error(function(data){
      var alertPopup = $ionicPopup.alert({
        title: 'Error en la comunicación con el servidor'
      });
    })

То, что я реализовал, как кажется, если оно функционирует, но когда я консультирую в базу данных стоимость сеанса, если она правильна, показывает мне сначала сеанс login, но проводит секунду и появляется $state.go('tabsEst.perfilEstudiante'); что для меня был бы правильным.

Я хотел бы знать, могут ли они вести меня или помогать с этим поддержания активных сеансов в приложении, или если они могут вести меня, в котором в настоящее время я реализую?

0
задан 20.03.2016, 22:51
1 ответ

Использовать SQL не плохая идея, если сама, так как он дает тебе Ваши гарантии. Но я думаю, что это разум, из-за которого ты продолжаешь видеть экран login "из-за секунды".

Апачи Cordova, у него есть пара событий, которые стоит иметь в виду, они "делайте паузу" и "обобщи", оба служат для того, чтобы обнаружить, когда приложение переходит во второй план, и когда он переходит в передний план, соответственно.

В Ионик Фрамеворк, ты можешь конфигурировать эти события посредством $ionicPlatform.on (.).

С другой стороны вместо того, чтобы записывать в SQL, тебе следует использовать localStorage из-за скорости и простоты.

В конце концов чтобы упрощать код, в твоем controller, когда ты наполняешь информацию пользователя, вместо того, чтобы добавлять все данные в $rootScope прямо, сделай это используя объект интермидянин.

$rootScope.cedula=data.persona.identificacion;
$rootScope.pNombre=data.persona.primerNombre;
$rootScope.NombreDoc=$rootScope.pNombre.substring(0, 1);
// etc..

Смени это на нечто похожее:

var usuario = {};
usuario.cedula = data.persona.identificacion;
usuario.pNombre = data.persona.primerNombre;
// etc.. y luego
$rootScope.usuario = usuario;

Все Объединенный

В конце концов и понимая, что ты сделал изменение, предложенное в controller:

.run(function($ionicPlatform, $rootScope) {

  $ionicPlatform.ready(function() {

    $ionicPlatform.on('pause', function() {
      localStorage.setItem('usuario', JSON.stringify($rootScope.usuario || {}));

      // opcionalmente puedes guardar la pagina donde se encuentra el usuario
      localStorage.setItem('hash', document.location.hash);
    });

    $ionicPlatform.on('resume', function() {
       var usuario = localStorage.getItem('usuario');
       $rootScope.usuario = JSON.parse(usuario);

       // restauras el estado cuando fue cerrada la app.
       document.location.hash = localStorage.getItem('hash');
    });   

  });

});

Потом, когда вновь открывается приложение, ты не нуждаешься в том, чтобы вновь консультировать SQLite, так как останется реставрированной стоимость $rootScope.usuario. Имей в виду, что, если у тебя есть кнопка "Logout", ты был бы должен удалять пользователь помещения Storge.

localStorage.removeItem('usuario');
localStorage.removeItem('hash');
3
ответ дан 24.11.2019, 14:42
  • 1
    Перед всем я тебе благодарен, из-за того, что твое время берет..., у меня есть вопрос в моем controller я должен добавлять стоимость hash или только делаю, как ты поместил мне привет. – Dimoreno 21.03.2016, 05:19

Теги

Похожие вопросы