2016-03-08 77 views
0

试图将未经过身份验证的用户重定向到登录屏幕。

我使用ui.route r和指令来检查记录的用户。但它没有按我的预期工作。它在页面加载之前没有检查,并且在持续重定向的页面上卡住了。

路由配置:

//User profile 
    .state('UserProfile', { 
     url: "/u/:id", 
     data: { 
      restrict: true, 
      name: "Your Profile", 
      header: true, 
      footer: false, 
      css: true, 
      transparentHeader: true 
     }, 
     templateUrl: "app/partials/user/userProfile.html", 
     controller: "userProfileController" 
    }) 

//Login page for not authenticated users 
    .state('LoginPage', { 
     url: "/login/", 
     data: { 
      restrict: false, 
      name: "Login", 
      header: false, 
      footer: false, 
      css: false, 
      transparentHeader: false 
     }, 
     templateUrl: "app/partials/common/loginPage.html", 
     controller: "loginController" 
    }) 

服务:

.factory('userService', ['$cookies', function($cookies){ 

    var userData = { 
     isLogged: false, 
     userId: "", 
     firstName: "", 
     profilePic: "" 
    }; 


    return userData; 

}]); 

指令:

socialMarkt.directive('checkUser', ['$rootScope', '$state', 'userService', function ($r, $state, userService) { 
    return { 
     link: function (scope, elem, attrs, ctrl) { 
     $r.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, options){ 
      event.preventDefault(); 
      if($state.current.data.restrict){ 
      if(!userService.isLogged){ 
       $state.go('LoginPage'); 
      } 
      } 
     }); 
     } 
    } 
    }]); 

我只是把它添加到一个页面进行测试。所以如果用户没有登录,据说它会使用$state.go('LoginPage')重定向到登录页面。

+0

其中国家 'LoginPage' 定义? –

+0

@CarlosBarcelona LoginPage是在$ stateProvider下定义的.config –

回答

2

我改变了我验证登录状态的方式。

即时通讯做它.RUN

.run(['$rootScope', '$state', 'userService', '$sessionStorage', function($rootScope, $state, userService, $sessionStorage){ 

    $rootScope.$on('$stateChangeStart' 
    , function(event, toState, toParams, fromState, fromParams) { 

    //Detecting sessions 
    if($sessionStorage.userData){ 
     var goodORnot = $sessionStorage.userData.isLogged; 
    }else{ 
     goodORnot = false; 
    } 

    var isAuthenticationRequired = toState.data 
      && toState.data.requiresLogin 
      //&& !userService.isLogged 
      && !goodORnot 
     ; 

    if(isAuthenticationRequired) 
    { 
     event.preventDefault(); 
     $state.go('LoginPage'); 
    } 
    }); 
}]); 
0

我看到的一个问题是,您过早调用preventDefault()。如果状态不受限制或用户登录,那么状态更改应该没有任何问题,而您正在阻止它发生。 event.preventDefault()应该放在$ state.go('loginPage')之前。

+0

不,那不是这种情况。即时通讯仍然无限循环 –

相关问题