代码之家  ›  专栏  ›  技术社区  ›  LaurensVijnck

Django REST JSONWebTokenAuthentication+Angular(未提供授权详细信息)

  •  0
  • LaurensVijnck  · 技术社区  · 8 年前

    几天来,我一直在尝试让这个相当简单的身份验证设置正常工作。

    我正在使用Django REST插件“Django REST framework jwt”进行JSON web令牌身份验证。

    在卷曲API时,它按预期工作。

    enter image description here

    不过,当我通过我的角度应用程序发出请求时;我经常收到一个未经授权的错误,其详细信息为“未提供授权详细信息”。然而,当对请求进行爬网时,可以清楚地看到它是存在的(请求中的令牌是有效的,因为我在CURL'中使用了它:

    enter image description here

    我通过我编写的拦截器注入身份验证头;看起来是这样的:

     intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        const auth = this.session.authorization;
    
        if (!auth) {
          return next.handle(req);
        } else {
          const newReq = req.clone({
            setHeaders: {
              Authorization: auth,
            },
          });
    
          return next.handle(newReq);
        }
      }
    

    此外,JWT_AUTH设置的设置定义如下:

    JWT_AUTH = {
        'JWT_ENCODE_HANDLER':
        'rest_framework_jwt.utils.jwt_encode_handler',
    
        'JWT_DECODE_HANDLER':
        'rest_framework_jwt.utils.jwt_decode_handler',
    
        'JWT_PAYLOAD_HANDLER':
        'rest_framework_jwt.utils.jwt_payload_handler',
    
        'JWT_PAYLOAD_GET_USER_ID_HANDLER':
        'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
    
        'JWT_RESPONSE_PAYLOAD_HANDLER':
        'auth.views.jwt_response_payload_handler',
    
        'JWT_SECRET_KEY': SECRET_KEY,
        'JWT_GET_USER_SECRET_KEY': None,
        'JWT_PUBLIC_KEY': None,
        'JWT_PRIVATE_KEY': None,
        'JWT_ALGORITHM': 'HS256',
        'JWT_VERIFY': True,
        'JWT_VERIFY_EXPIRATION': True,
        'JWT_LEEWAY': 0,
        'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
        'JWT_AUDIENCE': None,
        'JWT_ISSUER': None,
    
        'JWT_ALLOW_REFRESH': True,
        'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(seconds=3600),
    
        'JWT_AUTH_HEADER_PREFIX': 'Bearer',
        'JWT_AUTH_COOKIE': None,
    }
    

    框架设置如下所示:

    REST_FRAMEWORK = {
        'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
        'PAGE_SIZE': 10,
        'DEFAULT_PERMISSION_CLASSES': (
            'rest_framework.permissions.IsAuthenticated',
        ),
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
            'rest_framework.authentication.SessionAuthentication',
            'rest_framework.authentication.BasicAuthentication',
        ),
    }
    

    有什么建议吗?我不确定这是怎么回事。

    编辑

    “网络”选项卡中的请求/响应标题:

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  0
  •   LaurensVijnck    8 年前

    所以,它与Angular应用程序无关,但服务器不接受CORS。通过以下帖子中的解释来修复它:

    https://www.techiediaries.com/django-cors/

    推荐文章