Я пытаюсь создать основную проверку, может ли пользователь получить доступ к определенному маршруту или нет. У меня был прогресс в этом, но есть одна вещь, которую я не могу понять.locationChangeStart и предотвращение изменения маршрута
Я использую $ locationChangeStart для отслеживания изменений маршрута. Сценарий: 1. если пользователь вошел в систему, разрешите ему доступ ко всем маршрутам, за исключением маршрутов auth (login, register). Я проверяю это, вызывая метод isAuthenticated() из моего AuthFactory 2. Если пользователь не вошел в систему, он получает доступ только к входам и регистрам маршрутов. Любой другой маршрут должен быть предотвращен, и в этом случае пользователь должен быть перенаправлен на логин.
$rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl){
if(AuthFactory.isAuthenticated()){
if(AuthFactory.isAuthRoute(newUrl)){
event.preventDefault();
$location.path('/');
}
} else {
if(!AuthFactory.isAuthRoute(newUrl)){
event.preventDefault();
$location.path('/login');
}
}
});
Вещь, которая беспокоит меня, является единственной с preventDefault(). Если приложение достигает кода с preventDefault(), location.path()
, который приходит после этого, просто не работает.
Однако, если я удалю event.preventDefault()
, location.path()
работ. Проблема с этим заключается в том, что мне нужно, чтобы это предотвратило, в случае, если незарегистрированный пытается получить доступ к какой-либо не-auth-странице.
В принципе, я хочу иметь возможность предотвратить или перенаправить на основе запрошенного маршрута. Каков правильный способ сделать это?
Я не уверен, что вы делаете и чего хотите. Можете ли вы предоставить нам plunkr? –
Эй, баба, я отредактировал мой вопрос, пожалуйста, проверьте, является ли он более кратким сейчас? – Ned
По-моему, вы не используете службу определения местоположения $. Он слишком низкоуровневый. Я бы посмотрел https://github.com/angular-ui/ui-router, который намного больше подходит для задачи, которую вы описываете. –