2017-08-03 8 views
0

私は、保護されたページにログインを設定し、許可されていない場合はログインページに戻るように努力していますが、Django RESTフレームワークとDRF-次のチュートリアルを通過しようとしています:すべてのリクエストをフェッチし、その承認ヘッダにjwtトークンを追加する単純なインターセプタ

https://www.octobot.io/blog/2016-11-11-json-web-token-jwt-authentication-in-a-djangoangularjs-web-app/

私は、これはフロントエンド部のステップ3でどのように見えるかを確認していません。

// Add a simple interceptor that will fetch all requests and add the jwt token to its authorization header. 

例を挙げることはできますか?

また、この問題に関する私の元の投稿私はこれを一般的に設定しています。

Trying to get login required to work when trying to access protected pages

ありがとう!

答えて

1

インターセプタは$ httpProvider.interceptors配列に追加することで $ httpProviderに登録されているサービス工場です。 ファクトリが呼び出され、依存関係(指定されている場合) が挿入され、インターセプタが返されます。

intercepter の背後にある基本的な考え方は、それが各$ HTTP要求の前に呼び出されるということであり、あなたは、ユーザーがログインしているかどうかを確認するためにサービスを使用してに追加する必要があるトークンまたは何か他のものを追加することができますステータスコードに基づいてレスポンスを処理するのと同様に、の$ http要求ごとにという応答のロジックを追加することもできます。

ここでは、httpリクエストごとにアクセストークンを追加する方法を示します。

angular.module('myapp') 
.factory('authHttpResponseInterceptor', function($q, $location, sessionService, $http) { 
    return { 
    response: function(response) { 
     //some logic here 
     return response || $q.when(response); 
    }, 
    responseError: function(rejection) { 
     if (rejection.status === 401) { 
     //some logic here 
     } 
     return $q.reject(rejection); 
    } 
    } 
}); 
:ここ

angular.module('myapp') 
.run(['$rootScope', '$injector', function($rootScope,$injector) { 
    $injector.get("$http").defaults.transformRequest = function(data, headersGetter) { 
     if (sessionService.isLogged()) { 
     headersGetter()['Authorization'] = "Bearer " + sessionService.getAccessToken(); 
     } 
     if (data) { 
     return angular.toJson(data); 
     } 
    }; 
}); 

あなたは応答intercepterを使用する方法であります

関連する問題