Angularjs身份验证重定向问题

时间:2015-04-28 15:46:19

标签: angularjs authentication location

我有一个应用程序,除了登录之外的每个页面都需要身份验证我这样做是通过检查$ stateChangeStart,然后在未设置令牌时重定向到/ login。在初始应用程序加载这工作正常,但在登录屏幕,如果我键入另一个“受限制”的网址。它进行检查,更改网址,但仍然加载受限制的页面。我在这里缺少什么?

// app.run:

 app.lazy = $couchPotato;
    $rootScope.$state = $state;
    $rootScope.$stateParams = $stateParams;
    $rootScope.$on('$stateChangeStart', function(event, toState, toStateParams) {
        console.log("state changed to "+toState.name);
        console.log(toState);
        Authentication.validateLogin(toState, toStateParams);
    });

Authentication.validateLogin:

validateLogin:function(toState, toStateParams){
        $rootScope.toState = toState;
        $rootScope.toStateParams = toStateParams;
        if ($localStorage.token == null) {
             console.error("Not Authenticated!");
             $location.url('/login');
        }
}

2 个答案:

答案 0 :(得分:1)

我看到你使用angular-ui,所以我不确定使用'基本'角度有什么好处,但我写这个来处理路由变化时验证令牌。

app.run(['$rootScope', 'authService',
    function ($rootScope, authService) {
        $rootScope.$on("$routeChangeSuccess", function (event, next, current) {
            if (next && next.$$route && authService.isAuthenticated()) {
                authService.validate();
                $rootScope.appTitle = next.$$route.title;
            }
        });
    }]);

$ routeChangeSuccess在控制器加载后处理路径的导航(对于在确认验证时加载页面时加载的对象非常重要),然后验证它们。

这也执行2次检查,检查本地存储中的令牌是否存在并且是否正确形成,如果是,则将其发送回服务器以确认。

我还发现我必须使用$ locationChangeStart来处理页面刷新,以便在有人试图刷新页面时重新验证。

validateLogin解决方案:

validateLogin:function(toState, toStateParams){
  if(toState.access){
        if(toState.access.loginRequired){
               if ($localStorage.token == null) {
                   $state.go('login');
               }
         }
  }

答案 1 :(得分:0)

尝试使用validateLogin:

validateLogin:function(toState, toStateParams){
      if(toState.access){
            if(toState.access.loginRequired){
                   if ($localStorage.token == null) {
                       $state.go('login');
                   }
             }
      }
}