2016-03-08 49 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

不,那不是這種情況。即時通訊仍然無限循環 –

相關問題