2017-08-03 81 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。 工廠被調用並且具有依賴注射(如果指定) 並返回攔截。

背後截擊的基本思路是,將每個$ HTTP請求之前被調用,您可以使用服務來檢查,如果用戶登錄並添加標記或其他任何需要被添加到在header.You還可以添加一些邏輯爲每個$ HTTP請求響應,像處理基於狀態碼的響應。

這裏是你如何使用它的角添加訪問令牌爲每個HTTP請求。

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

這裏是你如何使用響應截擊

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