【发布时间】:2014-04-11 04:03:15
【问题描述】:
所以我正在做一个简单的“用户是否登录”检查并在用户未登录时将其重定向到 signin.html 页面。我的代码如下所示:
var myAppModule = angular.module('myApp', ['ngRoute', 'ngCookies']);
myAppModule.config(function($routeProvider) {
$routeProvider
.when('/page2', {
controller:'pagetwo',
templateUrl:'pagetwo.html'
})
.when('/signin', {
controller:'signinCTRL',
templateUrl:'signin.html'
})
});
myAppModule.run(function($rootScope, userInfo, $location) {
$rootScope.$on('$routeChangeSuccess', function () {
myCurrentRoute = $location.$$path;
if(myCurrentRoute != "/signin") {
userInfo.checkLogin(); // Check login first. This has the $location.path( "/signin" ); in it.
}
})
});
我的问题是,当用户转到 /page2 时,$routeChangeSuccess 函数会正常触发,并且在 userInfo.checkLogin() 内部我将它们重定向到将它们重定向到 signin.html 页面上的新路由。
问题是 pagetwo 控制器在用户被重定向到 signinCTRL 控制器之前仍然触发。
有没有办法阻止 pagetwo 控制器以某种方式运行? 我知道我可能只是将所有内容包装在 signinCTRL 中以检查用户是否已登录,但这违背了拥有routeChangeSuccess 函数。
【问题讨论】:
-
很好奇你为什么要做这个客户端。如果用户导航到他们无权查看的页面,您应该让服务器返回 403 错误。然后你可以抓住它并重定向到登录页面。
-
@BenFelda - 真的,所有真正的用户身份验证都通过 PHP 在服务器端发生。没有经过授权的 php 会话,JS 不可能调用 pages/files/data。我只关心抛出不需要发生的错误。这个特殊的项目也是我使用 Angular 的一次学习经历。
标签: angularjs angularjs-routing angularjs-controller