Ограничивать доступ пользователя в app Ionic

Я создаю app с ionic и хочу, чтобы, когда пользователь не будет logueado и направится к странице, которая не была бы login или реестром, эта принесла это к login. В случае, что пользователь захотел пойти в реестр, который app позволяет это ему.

Мой код - следующий:

$rootScope.$on('$stateChangeStart', function(event, toState, fromState){
    if(!UserFactory.isLoggedIn() && (toState.name !== 'login' || toState.name !== 'register') ){
        event.preventDefault();
        $state.go('login');
    }
});

Но тот же самый производит мне loop, какое-то решение?

1
задан 09.06.2016, 20:51
3 ответа

Ты можешь создавать функцию с обещанием, которое подтверждало бы, если заверен пользователь, и если нет, что переслал login.

После, в каждом состоянии, которого у себя требует пользователь logueado, ты решаешь эту функцию. Например:

  $stateProvider
    .state('home', {
      url: '/',
      templateUrl: 'components/home/home.html',
      controller: 'homeCtrl as home',
      resolve: {
        authenticate: authenticate
      }
    })
  .state('login', {
    url: '/login',
    templateUrl: 'components/login/login.html',
    controller: 'loginCtrl as login'
  });
  // Además, cuando el usuario hace login almaceno su token en el localstorage.
  // Al iniciar la aplicación si no hay token es que no hay usuario logueado,
  // por lo que redirijo directamente al login.

  if (!(typeof window.localStorage.token !== 'undefined' &&
      window.localStorage.token !== null)) {
    $urlRouterProvider.otherwise('/login');
  } else {
    $urlRouterProvider.otherwise('/');
  }

Будучи моей функцией заверения следующей:

function authenticate($ionicPlatform, $q, Auth) {
// Auth es mi propio servicio que se encarga del login/logout.
  if (Auth.isLogged()) {
    return $q.resolve();
  } else {
    Auth.logout();
    return $q.reject();
  }
}

и в Auth.logout () у меня есть один $state.go('login'); в конце концов чтобы руководить login.

1
ответ дан 24.11.2019, 14:11

Только измени условную. Помести один and вместо одного or

$rootScope.$on('$stateChangeStart', function(event, toState, fromState){
    if(!UserFactory.isLoggedIn() && toState.name !== 'login' && toState.name !== 'register'){
        event.preventDefault();
        $state.go('login');
    }
});

Предыдущей формы, если пользователь не logueado и состояние 'login' результат сравнения был бы следующим

// no logueado estado login
if(true && (false || true)){
     // Esto es true y vuelve a login
}

// no logueado estado registro
if(true && (true || false)){
     // Esto es true y vuelve a login
}

// no logueado otro estado
if(true && (true || true)){
     // Esto es true y vuelve a login
}

Формы, которую я помещаю тебе

// no logueado estado login
if(true && false && true)){
     // Esto es false y no hace nada
}

// no logueado estado registro
if(true && true && false)){
     // Esto es false y no hace nada
}

// no logueado otro estado
if(true && true && true)){
     // Esto es true y vuelve a login
}
0
ответ дан 24.11.2019, 14:11
  • 1
    mmm, продолжает производиться цикл, возможно это моя ошибка. Ты можешь подтверждать примерами мне твой ответ, с c и # 243; я говорю ionic, возможно это интерпретирую плохо, большое спасибо! – justMiLa 09.06.2016, 22:02
  • 2
    @user3042194 Из-за удаленного ответа я вижу, что ты старался помещать условие три раза. Только ты должен писать это однажды, как я поместил это тебе сначала. То, что я поместил внизу, является explicaci и # 243; n, которого имей, и # 237; схвати раньше, с которым tendr и # 237; схвати сейчас, если ты используешь c и # 243; я говорю, что ты dej и # 233; и результат сравнений. Не забывай пометить ответ как принятая, если ты sirvi и # 243;. – devconcept 10.06.2016, 15:53

Другой выбор - что-то как это:

        .state('app', {
            url: "/app",
            cache: false,
            abstract: true,
            templateUrl: "pagina.html",
            controller: 'AppCtrl',
            onEnter: function($state, Auth){
                if(!UserFactory.isLoggedIn()){

                   $state.go('login');

                }
            }                
        })

Так с собой, который перед тем, как входить, идет к login, он протестировал то, что вы комментируете, но давал мне ошибки и с этим выбором я в порядке.

, Которые были известно бы, что я начинаюсь и не являюсь никаким гуру, так что, если есть какая-то ошибка, вас не было очень твердыми :)

0
ответ дан 24.11.2019, 14:11
  • 1
    Гениальный! Прибудьте к тому же soluci и # 243; n, y я думаю, что это более преуспевшее на концептуальном уровне. Спасибо! – justMiLa 22.06.2016, 19:05