具有身份验证和其他方式的路由逻辑

时间:2016-01-07 08:56:23

标签: angularjs angular-ui-router

我一直致力于为我的角度应用程序设计身份验证系统。 我设法让一些州“安全”。使用以下配置代码重定向到登录页面。

.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();行。

1 个答案:

答案 0 :(得分:1)

您应该检查一下,如果用户未登录,则指向otherwise状态以登录其他家庭。

像这样......

if (loggedIn) {

     $urlRouterProvider.otherwise('/home');

    } else {
        $urlRouterProvider.otherwise('/login');
    }

loggedIn可以设置为等于布尔值,具体取决于用户是否已登录。