简单的拦截器,它将获取所有请求并将jwt标记添加到其授权标头中

时间:2017-08-03 18:54:21

标签: angularjs django-rest-framework jwt

我努力设置受保护页面需要登录并在未经授权的情况下重新路由到登录页面,在使用Django REST Framework和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 个答案:

答案 0 :(得分:1)

  

拦截器是注册的服务工厂   $ httpProvider将它们添加到$ httpProvider.interceptors数组中。   调用工厂并注入依赖项(如果指定)   并返回拦截器。

intercepter 背后的基本思想是它将在每个$ http请求之前调用,您可以使用服务来检查用户是否已登录并添加令牌或其他任何需要的内容添加到标题中。您还可以为每个$ 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);
     }
  }
});