2016-04-22 7 views
2

こんにちは、春のセキュリティを設定した後、私のためにログインが動作します。しかし、私は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);}}) 
}); 

私は

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) 
             } 
        };}); 

私はあなたの助けのために喜んでいただけることでしょう認証サービスのための私のコントローラANGコールを持っている私のapp.jsです!クッキーではなく、角度1.2以下、またはのためのその使用の$は、cookiestoreの、それが無効になっているリフレッシュ後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

あなたのユーザー情報は '$ rootScope'に保存されているようです。ページをリフレッシュすると、ページが空になります。 –

+0

あなたの 'app.run()'の中でなぜ '$ rootScope.authenticated = false;'をやっていますか? –

+0

ログインが成功しても常に同じ問題が発生したら私はそれを無視してコントローラに入れました – yeddez

答えて

2

あなたは$ rootScopeで認証された値を格納するための最初のステップとして存在している場合

+0

変数$ rootScope.authenticatedをリフレッシュすると、同じ問題がfalseに初期化されます。私はそれを初期化する必要があるか分からない! – yeddez

2

チェック角1.2以上の$クッキー。 あなたはユーザーのための$は、cookiestoreを使用している、のために同じことが別のオプション

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

私が答えていたものよりも速くて優れています。うまくいった;-) –

+0

はいユーザーはCookieにうまく格納されています。問題は、$ rootScope.authenticatedにあります。私はログインページを私のアプリケーションにロードされた最初のページにするために使用しています – yeddez

+0

'app.run'はルータが起動する前に実行されます。そこに' $ rootScope.authenticated'の値を設定できます。 ps: '$ rootScope'を使う代わりに、' user'サービスを作ることが推奨されます。 – DrinkBird

1

を認証しないのlocalStorageに認証値を格納することです:

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

次のように続いて、認証値を取得できます。

localStorage.getItem("session.authenticated") || false; 
関連する問題