我希望通过外部服务为我的路由创建一个简单的身份验证检查。
我定义了路由对象的访问要求:
$routeProvider
.when('/', {
templateUrl: 'src/app/views/index.html',
controller: 'indexCtrl',
authenticated: true
})
.when('/login', {
templateUrl: 'src/app/views/login.html',
controller: 'loginCtrl',
anonymous: true
})
.otherwise({
redirectTo: '/'
})
;
然后,我检查我是否在$routeChangeStart
活动中获得许可。
$rootScope.$on('$routeChangeStart', function (event, next) {
if(next.authenticated && !$myService.isLoggedin())
$location.path("/login");
else if(next.anonymous && $myService.isLoggedin())
$location.path("/secured");
});
实际上,它有效-
如果用户未通过身份验证,则将他移动到登录页面,如果他已通过身份验证,但路由仅适用于匿名用户,则将其移动到另一个页面,等等。
但是 - 这种重定向实际上是在控制器和模板加载之后发生的! 即使我没有经过身份验证,它也会导致我的控制器对我的 REST API 做一些不必要的请求。
在他们处理之前如何处理路线?