Я пытаюсь четко реализовать способ перенаправления пользователя на логин входа, если они не вошли в систему. Я основываю свое решение на другом ответе SO here, который doesn Не работайте из коробки. Вот мое решение.Перенаправление на маршрут, если пользователь не прошел аутентификацию
angular.module('myApp', ['ngResource', 'ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
var requireAuthentication = function() {
return {
load: function ($q) {
console.log('Can user access route?');
if (g_isloggedIn === true) { // fire $routeChangeSuccess
var deferred = $q.defer();
deferred.resolve();
console.log('Yes they can!');
return deferred.promise;
} else { // fire $routeChangeError
console.log('No they cant!');
return $q.reject("'/login'");
}
}
};
};
$routeProvider
.when('/some_page_that_requires_authentication', {
templateUrl: '/views/secret.html',
controller: 'secretCtrl',
resolve: requireAuthentication()
})
.when('/anybody_can_see_me', {
templateUrl: '/views/public.html',
controller: 'publicCtrl',
});
}]);
Мой вопрос, где я могу слушать на $routeChangeError
события, так что я могу перенаправить маршрут? Я пытался сделать это в директиве, но никогда не смог запустить событие. Я не могу поместить его в контроллер, потому что он не будет загружаться, если обещание будет отклонено. Есть предположения?
Вы должны быть в состоянии наблюдать за ним в любом контроллере (или директиве), который находится вне элемента 'ng-view'. – Stewie
может даже помещать его в 'run()' ... небольшую ошибку в вашем коде ... нужно вызвать '$ q.defer();' перед вашим 'if' – charlietfl