Я создаю 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, какое-то решение?
Ты можешь создавать функцию с обещанием, которое подтверждало бы, если заверен пользователь, и если нет, что переслал 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.
Только измени условную. Помести один 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
}
Другой выбор - что-то как это:
.state('app', {
url: "/app",
cache: false,
abstract: true,
templateUrl: "pagina.html",
controller: 'AppCtrl',
onEnter: function($state, Auth){
if(!UserFactory.isLoggedIn()){
$state.go('login');
}
}
})
Так с собой, который перед тем, как входить, идет к login, он протестировал то, что вы комментируете, но давал мне ошибки и с этим выбором я в порядке.
, Которые были известно бы, что я начинаюсь и не являюсь никаким гуру, так что, если есть какая-то ошибка, вас не было очень твердыми :)