1. 에러 상황
python, Django, VScode 환경에서 32bit 가상 환경을 만든 후 모듈들을 재설치하다가, 다음 에러를 만나게 되었다.
AttributeError : Invalid API setting: 'JWT_PAYLOAD_HANDLER'
이는 djangorestframework--simplejwt 라이브러리를 설치한 이후 발생한 문제였다.
일단 내 코드에서 JWT_PAYLOAD_HANDLER를 사용하는 코드를 찾아보자. 정확히는 터미널에 나온 로그를 확인하면 알 수 있다.
내 코드의 경우, settings.py와 serializers.py에서 사용하고 있었다.
#settings.py
JWT_AUTH = {
"JWT_SECRET_KEY": SECRET_KEY,
"JWT_ALGORITHM": "HS256", # 암호화 알고리즘
"JWT_ALLOW_REFRESH": True,
"JWT_EXPIRATION_DELTA": timedelta(days=7), # 유효기간
"JWT_REFRESH_EXPIRATION_DELTA": timedelta(days=28), # JWT 토큰 갱신 유효기간
}
#serializers.py
from rest_framework.settings import api_settings
JWT_PAYLOAD_HANDLER = api_settings.JWT_PAYLOAD_HANDLER
JWT_ENCODE_HANDLER = api_settings.JWT_ENCODE_HANDLER
# JWT 토큰 생성 함수
def generate_jwt_token(user):
payload = JWT_PAYLOAD_HANDLER(user)
return JWT_ENCODE_HANDLER(payload)
2. 에러 원인
해당 에러는 JWT_PAYLOAD_HANDLER가 최신 버전의 djangorestframework-simplejwt에서 더 이상 사용되지 않기 때문이다. simplejwt 를 사용하려면, JWT_PAYLOAD_HANDLER 대신 SIMPLE_JWT를 사용해주어야 한다.
djangorestframework-jwt를 기준으로 코드를 작성하다가, simplejwt로 바꾸었을 때 코드 상의 에러가 나는 것이다.
3. 해결
일반 JWT관련 코드들을 SIMPLE_JWT 코드로 변경하면 된다.
#settings.py
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(days=1), # 액세스 토큰 유효기간
'REFRESH_TOKEN_LIFETIME': timedelta(days=7), # 리프레시 토큰 유효기간
'ROTATE_REFRESH_TOKENS': True, # 리프레시 토큰 재발급 시 갱신
'BLACKLIST_AFTER_ROTATION': True, # 리프레시 토큰 사용 후 블랙리스트
'ALGORITHM': 'HS256', # 암호화 알고리즘
'SIGNING_KEY': SECRET_KEY, # 서명 키
}
#serializers.py
from rest_framework_simplejwt.tokens import RefreshToken
# JWT 토큰 생성 함수
def generate_jwt_token(user):
refresh = RefreshToken.for_user(user) # 특정 사용자 기반으로 리프레시 토큰 생성
return {
'refresh': str(refresh), # 리프레시 토큰
'access': str(refresh.access_token), # 액세스 토큰
}'🕵️에러 해결사' 카테고리의 다른 글
| Windows에서 Python 파일 경로 오류 해결하기: 올바른 경로 입력 방법 총정리 (0) | 2025.03.11 |
|---|---|
| "detail": "Given token not valid for any token type" 토큰 인증 오류 해결 (0) | 2025.02.19 |
| [Error]Id returned 1 exits status 에러 해결하기 (Dev C++) (0) | 2025.02.12 |
| Spring Boot 프로젝트 실행 오류: Execution failed for task 해결 하기 (0) | 2025.02.04 |
| Spring Boot 프로젝트 실행 오류: Could not resolve all dependencies 해결하기 (0) | 2025.02.04 |