Я использую новый ui-router 1.0.3 в своем приложении. Мне нужно реализовать аутентификацию и авторизацию в моем приложении. Вот мой код
run(function ($transitions, $state, AuthService) {
$transitions.onStart({
to: function (state) {
return !!(state.data && state.data.requiredAuth);
}
}, function (state) {
if (!AuthService.isAuthenticated()) {
return $state.target('auth.login');
}
}
);
$transitions.onStart({
to: 'auth.*'
}, function () {
if (AuthService.isAuthenticated()) {
return $state.target('app');
}
});
});
Вот мой конфиг
.config(function ($stateProvider,$urlRouterProvider) {
$stateProvider
.state('app', {
redirectTo: 'contacts',
url: '/app',
data: {
requiredAuth: true,
},
component: 'app'
})
.state('contacts', {
parent: 'app',
url: '/contacts?filter',
component: 'contacts',
params: {
filter: {
value: 'none'
}
},
data :{
role : ['Admin','Manager'],
permission : 'read'
},
resolve: {
contacts: function (ContactService) {
return ContactService.getContactList().$loaded();
},
filter: function ($transition$) {
return $transition$.params();
}
}
})
.state('contact', {
parent: 'app',
url: '/contact/:id',
component: 'contactEdit',
data :{
role : ['Admin','Manager'],
permission : 'edit'
},
resolve: {
contact: function ($transition$, ContactService) {
var key = $transition$.params().id;
return ContactService.getContactById(key).$loaded();
}
}
})
.state('auth.register', {
url: '/register',
component: 'register'
})
.state('auth', {
redirectTo: 'auth.login',
url: '/auth',
template: '<div ui-view></div>'
})
.state('auth.login', {
url: '/login',
component: 'login'
})
.state('auth.denied',{
url:'/denied',
component:'accessDenied'
});
$urlRouterProvider.otherwise('/auth/login');
});
Вот сервисная функция
this.isAuthenticated = function () {
return !!authData;
};
Когда я захожу, он успешно обрабатывает аутентификацию и отправляет меня в состояние контакта. Когда я выхожу и получаю доступ напрямую к странице контакта, она застревает на странице входа. Мне нужно проверить данные о состоянии ролей и разрешений.
Нужна помощь.