2017-07-21 9 views
0

私は、ASP.NET Web API、OAuth Authentication、およびangularJSを使用してアプリケーションを開発しました。トークンが無効/有効期限切れになると、不正な状態になります。私はまた、httpステータス401を確認しました。私はログイン状態にリダイレクトします。完璧に動作します。しかし、私は共通の/一般的なオブジェクトを作成する必要がありますすべてのhttp要求のために、任意のHTTP要求ステータス401、それは自動的にすべてのHTTP要求を個別にチェックする必要はありませんログインにリダイレクトされます。私の下のコード(errorCallback)を見てください。AngularJSでhttpステータスが承認されていない場合、ログインにリダイレクトする方法

角度コントローラ

StudentServices.GetStudentProfileByPIN($scope.SearchPIN).then(function (response) { 
     if (response.data != null) { 
      $scope.PInAvailableMsg = ""; 
     } 
     else { 
     } 
    }, function errorCallback(response) { 
     if (response.status==401) { 
      $window.location.href = "/#/login"; 
     } 
    }); 

答えて

2

AngularJS $ httpProvider.interceptors両方の方法で、HTTPリクエストを変更できるようにすべての要求を処理します。アプリケーション用のAPIがほとんどないとします。 APIを呼び出す前に権限が必要です。さもなければ401エラーが発生し、すべての角度コントローラーのオブジェクトの401エラーをチェックする作業は圧倒ですが、$ httpProvider.interceptorsは一般的な作業を行います。許可されていなければ、ログインします。 httpリクエストのコンストラクタと似ています。下記のコードをご覧ください。あなたはあなたのapp.jsにそれを注入することができます

mainApp.service('authInterceptor', function ($q, $window) { 
    var service = this; 
    service.responseError = function (response) { 
    if (response.status == 401) { 
     $window.location.href = "/#/login"; 
    } 
    return $q.reject(response); 
    }; 
}); 


mainApp.config(function ($stateProvider, $urlRouterProvider, $httpProvider) { 
$httpProvider.interceptors.push('authInterceptor'); 
$stateProvider 
    .state('home', { 
     url: '/home', 
     templateUrl: 'templates/home/home.html' 
    }); 
}); 
4

はい、あなたはInterceptorsを使用することができます。 app.configに追加する必要があります。

  1. 要求

例を送信した後に要求

  • を送信する前に:彼らは

    .config(['$routeProvider', '$httpProvider', '$locationProvider', '$stateProvider', '$urlRouterProvider', '$translateProvider', '$windowProvider', function($routeProvider, $httpProvider, $locationProvider, $stateProvider, $urlRouterProvider, $translateProvider, $windowProvider) { 
          var $window = $windowProvider.$get(); 
          $httpProvider.interceptors.push(function($q, $location, $localStorage, $window) { 
           return { 
            request: function(config) { 
             config.headers = config.headers || {}; 
             return config; 
            }, 
            response: function(response) { 
             if (response.data.code == 401) { 
              $location.path('/signIn'); 
    
             } 
             return response || $q.when(response); 
            } 
           }; 
          }); 
    
  • 関連する問題