본문 바로가기

Backend/Python

[DRF] JWTAuthentication Errors

반응형

1. 기본 인증 클래스 변경시

ImportError: Could not import 'MunDeuk.startService.addon.JWTAuthentication.JWTAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: Module "MunDeuk.startService.addon.JWTAuthentication" does not define a "JWTAuthentication" attribute/class.

 

➡️ 주로 모듈 경로 또는 클래스 정의가 잘못되었을 때 발생한다.

프로젝트 구조가 아래와 같고 JWTAuthentication.py안에 JWTAuthentication.class가 있는 경우를 예로 들었다.

project_root/
├── MunDeuk/
│   ├── startService/
│   │   ├── addon/
│   │   │   ├── __init__.py
│   │   │   ├── JWTAuthentication.py
│   │   ├── __init__.py
│   ├── __init__.py

 

1. 모듈 경로 확인
DEFAULT_AUTHENTICATION_CLASSES 설정에서 사용하는 경로가 정확한지 확인

예를 들어, MunDeuk.startService.addon.JWTAuthentication.JWTAuthentication 경로가 실제 JWTAuthentication 클래스가 정의된 파일 경로와 일치하는지 확인

2. 클래스 정의 확인
JWTAuthentication 클래스가 올바르게 정의되어 있는지 확인

클래스 이름이 올바른지, 파일 내에서 정확하게 정의되었는지 확인

3. 파일 및 경로 구조 확인
MunDeuk 디렉토리가 프로젝트 루트 디렉토리에 있는지, startService와 addon 디렉토리 구조가 올바른지 확인

4. __init__.py 파일 확인
모든 디렉토리에 __init__.py 파일이 존재하는지 확인

이 파일이 존재해야 해당 디렉토리가 파이썬 패키지로 인식됨

5. 경로 확인
JWTAuthentication 클래스가 제대로 정의된 경우, 설정 파일에서 DEFAULT_AUTHENTICATION_CLASSES를 아래와 같이 설정

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'MunDeuk.startService.addon.JWTAuthentication.JWTAuthentication',
    ),
}

 

2. simplejwt 라이브러리 사용

➡️ jwt인증을 위한 라이브러리로 자주 사용되기도 하고 무엇보다 jwt라이브러리는 jwt토큰 하나만 발급되는데 simplejwt라이브러리는 access토큰과 refresh토큰을 json형식으로 response하여 사용할 수 있다.

 

 

3. Bearer처리 관련 이슈

➡️

 

쿠키는 정상적으로 발급되었는데 401이 발생한다.

내용을 확인해보니 Header에서 Bearer부분을 인식하지 못해 발생한 에러로 생각되었다.

Middleware를 구현하여 해결

 

4. Unexpected string

➡️ 헤더 추가 작업을 진행하면서 'Authorization': Bearer ${access_token},에서 Unexpected string에러가 발생했다.

코드를 보니 CSRF토큰 처리 이후에 구분을 위한 쉼표도 없고 Bearer ${access_token},에 따옴표 처리가 되어있었다.

쉼표를 추가하고 따옴표대신 키보드 1 왼쪽의 `으로 처리하였다. 주의하자.

 

하지만 결과적으로는 웹뷰에서 헤더에 직접 넣는방식으로 하면 초기 로딩시에 문제가 되어 middleware에서 호출되었을 때 처리하는 것으로 수정

반응형

'Backend > Python' 카테고리의 다른 글

[drf] JWT인증 추가  (0) 2024.07.16
[DRF] Django Rest Framework (1-2)  (0) 2024.07.12
[DRF] Django Rest Framework (1-1)  (0) 2024.07.11
[DRF] Django Rest Framework (1)  (0) 2024.07.09
[DRF] Django Rest Framework (0)  (0) 2024.07.09