2016-04-22 14 views
2

設置Spring Security後,登錄工作正常。但是,當我刷新anypage時,它會將我重定向到登錄頁面。我如何擺脫這一點。 這裏是我的代碼angularjs當我刷新我的頁面時,它將我重定向到登錄頁面

config.js

'use strict'; 
var app = angular.module('MyApp', [ 'ngResource', 'ngRoute', 
     'myAppControllers', 'ngAnimate', 'ui.bootstrap', 'ngCookies' ]); 

app.config(function($routeProvider) { 

    $routeProvider.when('/products/:idCat', { 
     templateUrl : '../views/partials/products.html', 
     controller : 'ProductsController' 

    }).when('/products', { 
     templateUrl : '../views/partials/allProducts.html', 
     controller : 'ProductsController' 

    }).when('/supprimer', { 
     templateUrl : '../views/partials/delete.html', 

    }).when('/update', { 
     templateUrl : '../views/partials/update.html', 
     controller : 'UserController' 

    }).when('/client', { 
     templateUrl : '../views/partials/client.html', 
     controller : 'ClientController' 
    }).when('/agences', { 
     templateUrl : '../views/partials/agences.html', 
     controller : 'MapController' 

    }).when('/login', { 
     templateUrl : '../views/partials/login.html', 
     controller : 'mainController' 
    }).when('/', { 
     templateUrl : '../views/partials/Home.html', 
    }) 
    $routeProvider.otherwise('/'); 

}); 
app.run(function($route, $rootScope, $http, $location, $cookieStore, 
     $anchorScroll) { 
    $rootScope.authenticated = false; 
    $rootScope.$on('$routeChangeStart', function() { 
     var originalPath = $location.url(); 
     if ($rootScope.authenticated == false) { 
      $location.path('/login'); 

     } else { 
      $rootScope.redirectUrl = angular.copy($location.url()); 
      var user = $cookieStore.get('user'); 
      if (user !== undefined) { 
       $rootScope.user = user; 
       $http.defaults.headers.common['X-Auth-Token'] = user.token; 
       $location.url(originalPath);}}) 
}); 

我app.js在那裏我有我的控制器昂呼籲身份驗證服務

myAppControllers 
     .controller(
       'mainController', 
       function($scope, $rootScope, loginService, ProductService, 
         $location, $cookies, $cookieStore, $http) { 
        $rootScope.salesAgent = true; 
        $scope.loggedIn = false; 
        $rootScope.hasRole = function(role) { 

         if ($rootScope.user === undefined) { 
          return false; 
         } 

         if ($rootScope.user.authorities === undefined) { 
          return false; 
         } 

         for (var i = 0; i < $rootScope.user.authorities.length; i++) { 
          if ($rootScope.user.authorities[i].authority == role) 
           return true; 
         } 

         return false; 
        }; 

        $scope.logout = function() { 

         console.log("Testtttttttttt"); 
         delete $rootScope.user; 
         delete $http.defaults.headers.common['X-Auth-Token']; 
         $cookieStore.remove('user'); 
         $location.url("/login"); 
        }; 

        $scope.authenticate = function() { 
           loginService 
             .authenticate($scope.username, 
               $scope.password) 
             .then(
               function(user) { 

                $rootScope.user = user; 
                $http.defaults.headers.common['X-Auth-Token'] = user.token; 
                $cookieStore.put('user', 
                  user); 

                if ($rootScope.redirectUrl != null 
                  && $rootScope.redirectUrl 
                    .indexOf('/') == -1) 
                 $location 
                   .url($rootScope.redirectUrl); 
                else { 
                 $rootScope.authenticated = true; 
                 $location.path("/"); 
                } 
                $rootScope.redirectUrl = null; 
                $rootScope.redirectStatus = null; 
               }), 
           function err(data) { 
            if ($rootScope.redirectStatus == 401) 
             } 
        };}); 

我會很高興爲您的幫助!

+0

看起來您的用戶信息存儲在'$ rootScope'中。如果刷新頁面,它現在被清空。 –

+0

另外,爲什麼你''rootScope.authenticated = false;'你的'app.run()'裏面? –

+0

我忘了它,並且一旦登錄成功,但總是出現同樣的問題,我把它放到我的控制器中。 – yeddez

回答

2

您在$ rootScope存儲驗證值的第一步,而不是在使用$的CookieStore對角1.2以下,或$角的1.2或以上的$餅乾。 您正在使用$的CookieStore用戶,做同樣驗證

$cookieStore.put('authenticated',$rootScope.authenticated); 
+0

同樣的問題,一旦我刷新變量$ rootScope.authenticated被初始化爲false。我不知道我應該在哪裏初始化它! – yeddez

2

檢查,如果cookie存在,刷新是越來越無效後run

app.run(function($route, $rootScope, $http, $location, $cookieStore, $anchorScroll) { 
    var user = $cookieStore.get('user'); 
     if (user !== undefined) { 
     // set up X- header and other variables here 
+0

比我回答的更快,更好。幹得好;-) –

+0

是用戶很好地存儲在cookie中。問題出在$ rootScope.authenticated。我使用它來使我的第一頁登錄頁面加載到我的應用程序 – yeddez

+0

'app.run'發生在路由器啓動之前。您可以在那裏設置'$ rootScope.authenticated'的值。 ps:推薦的方法是創建一個'user'服務,而不是使用'$ rootScope'。 – DrinkBird

1

另一種選擇是認證值存儲在localStorage的:

localStorage.setItem ('session.authenticated', true); 

然後你就可以得到驗證值,如下所示:

localStorage.getItem("session.authenticated") || false; 
相關問題