我一直致力于为我的角度应用程序设计身份验证系统。 我设法让一些州“安全”。使用以下配置代码重定向到登录页面。
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise("/home");
$stateProvider
.state('home',
{
url : '/home',
templateUrl : 'views/home.html',
resolve : {
authenticate: authenticate
}
}
}
authenticate
是解析或拒绝承诺的函数。
function authenticate($q, $location, $timeout) {
//simplified version
var authed = false;
if (authed == true) {
return $q.when();
}
else {
$timeout(function() { $location.path('/login'); })
return $q.reject();
}
}
这适用于我的应用程序中的每个网址:
http:myproject.com/#/privatepage redirects to http:myproject.com/#/login
http:myproject.com/#/ redirects to http:myproject.com/#/login
但是http:myproject.com/
进入$ urlRouterProvider的otherwise
方法,重定向到#/ home然后重定向到#/ login几次,我得到一个角度错误:
错误:[$ rootScope:infdig] http://errors.angularjs.org/1.4.8/ $ rootScope / infdig P0 = 10安培; P1 =%5B%5D
我相信这发生在身份验证功能的return $q.reject();
行。
答案 0 :(得分:1)
您应该检查一下,如果用户未登录,则指向otherwise
状态以登录其他家庭。
像这样......
if (loggedIn) {
$urlRouterProvider.otherwise('/home');
} else {
$urlRouterProvider.otherwise('/login');
}
loggedIn
可以设置为等于布尔值,具体取决于用户是否已登录。