2014-09-23 54 views
0

美好的一天!我試圖檢查每個頁面上的user_id cookie,如果沒有cookie,重定向到登錄頁面。但是出現了錯誤,並且由於遞歸而導致應用程序崩潰。 爲什麼這段代碼不起作用? 在app.js我承諾條件路由不起作用

.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/', {templateUrl: 'partials/login.html', controller: 'loginCtrl'}); 
    $routeProvider.when('/signup', {templateUrl: 'partials/signup.html', controller: 'signupCtrl', resolve: {factory: checkRouting}}); 
    $routeProvider.when('/index', {templateUrl: 'index.html', controller: 'MainCtrl', resolve: {factory: checkRouting}}); 
    $routeProvider.otherwise({redirectTo: '/'}); 
}]); 

var checkRouting = function ($q, $rootScope, $http, $location, localStorageService) { 
    function redirect(path) { 
     if ($location.path() != path) { 
      $location.path(path); 
      return $q.reject(); 
     } else { 
      return true; 
     } 
    } 

    return getUserDataPromise($q, $rootScope, $http, localStorageService) 
     .then(function (result) { 
       return redirect("/index"); 
     }, function (reason) { 
      console.error(reason); 
      return redirect("/"); 
     }); 
}; 

var getUserDataPromise = function ($q, $rootScope, $http, localStorageService) { 
    if ($rootScope.session_id) { 
     return $q.when($rootScope.session_id); 
    } else { 
     var session_id = localStorageService.cookie.get("session_id"); 
     if (!session_id) { 
      return $q.reject("No session id."); 
     } else { 
      $rootScope.session_id = session_id; 
      return $q.when(session_id); 
//    return $q.reject("Error requesting server: " + reason); 
     } 
    } 

controllers.js是

angular.module('myApp.controllers', []) 
    .controller('MainCtrl', ['$scope', '$http', '$window', '$route', '$location', '$routeParams', function($scope, $http, $window, $route, $location, $routeParams) { 
     console.log("fffffffff"); 
    }]) 
    .controller('loginCtrl', ['$rootScope', '$scope', '$http', '$window', '$route', '$location', '$routeParams', 'localStorageService', function($rootScope, $scope, $http, $window, $route, $location, $routeParams, localStorageService) { 
    $scope.username = ""; 
    $scope.password = ""; 
    $scope.auth = false; 
    $rootScope.session_id=""; 
    var sess="mlvdfmvlkcmlkvnxclkjmnvkl561vfd" //for debug 
    $scope.submit = function() { 
     $scope.secret = "M" 
     var responsePromise = $http.post("ajax", { method: "login", login: $scope.username, password: $scope.password, secret: $scope.secret }); 
     responsePromise.success(function(data, status, headers, config) { 
      if (data.status == "done") { 
       $scope.auth = true; 
       console.log(data.status); 
       localStorageService.cookie.set("session_id", sess); 
       $location.path("/index"); 
      }; 
     }); 
     responsePromise.error(function(data, status, headers, config) { 
      alert("AJAX failed!"); 
     }); 
     }; 
    }]) 
+0

我不確定你可以在這裏發佈你的網站的一半,並問爲什麼它不工作。請你可以製作一個jsFiddle或其他東西? – meriadec 2014-09-23 18:32:53

回答

0

使用routeChageStart事件,並攔截路線的變化,如果用戶沒有會話。

例如:

$rootScope.$on('$routeChangeStart', function (event, next, current) { 
    // if route requires auth and user is not logged in 
    if (userIsLoggedIn()==false) { 
     // redirect back to login 
     $location.path('/login'); 
    } 
    }); 

這樣的任何應用程序的URL將redirec登錄,如果用戶沒有通過驗證。

0

非常感謝您的回答。 我明白我遇到麻煩的地方。我不應該重定向到「/ index」頁面。當我創建「partials/main」頁面並更新代碼以重定向到「/ main」時,遞歸已經消失。