Payload 인증 기능과 Django 연동 방향
아카이브된 문서 - Payload 폐기
Frontend에서 Payload를 더 이상 사용하지 않습니다. 이 문서는 실제 고양이의 만행 홈페이지에서 구현된 내용과는 무관합니다.
Payload에서 제공하는 권한에 따라 Django에서 제공하는 데이터가 달라지는 환경을 구현합니다. 아래는 완성된 코드가 아니라 향후 개발에 참고하기 위한 전반적인 개발 방향입니다.
1. 인증 및 권한 관리
Payload CMS에서 JWT 또는 API 키 사용
- Payload CMS는 기본적으로 JWT(JSON Web Token) 기반 인증을 지원합니다.
- Django는 Payload CMS가 발급한 JWT를 검증하여 사용자를 식별하고 권한을 확인합니다.
Django에서 JWT 검증
Django에서 Payload CMS의 JWT를 검증하려면 PyJWT 라이브러리를 사용할 수 있습니다.
import jwt
from django.http import JsonResponse
from django.conf import settings
def jwt_auth_middleware(get_response):
def middleware(request):
token = request.headers.get('Authorization', '').split('Bearer ')[-1]
try:
payload = jwt.decode(token, settings.PAYLOAD_SECRET_KEY, algorithms=['HS256'])
request.user = payload # JWT에서 사용자 정보 추출
except jwt.ExpiredSignatureError:
return JsonResponse({'error': 'Token expired'}, status=401)
except jwt.InvalidTokenError:
return JsonResponse({'error': 'Invalid token'}, status=401)
return get_response(request)
return middlewarePayload CMS 설정
Payload CMS의 auth 컬렉션에서 JWT를 활성화합니다.
import { CollectionConfig } from 'payload/types';
const Users: CollectionConfig = {
slug: 'users',
auth: {
tokenExpiration: 7200, // 토큰 유효 기간 (초 단위)
maxLoginAttempts: 5,
lockTime: 600000, // 잠금 시간 (밀리초 단위)
},
};
export default Users;2. 조직별 사용자 관리
Payload CMS와 Django 모두 조직별 데이터 관리를 지원하도록 설계해야 합니다.
Payload CMS에서 조직별 사용자 관리
Payload CMS에서 organization 컬렉션을 추가하여 사용자와 조직 간 관계를 정의합니다.
const Organizations: CollectionConfig = {
slug: 'organizations',
fields: [
{ name: 'name', type: 'text', required: true },
{ name: 'users', type: 'relationship', relationTo: 'users', hasMany: true },
],
};
export default Organizations;Django에서 조직별 데이터 제공
Django는 요청된 JWT의 organization 정보를 기반으로 데이터를 필터링하여 제공합니다.
from rest_framework.views import APIView
from rest_framework.response import Response
class OrganizationDataAPI(APIView):
def get(self, request):
organization_id = request.user.get('organization_id') # JWT에서 추출된 정보
data = get_data_for_organization(organization_id) # 조직별 데이터 조회
return Response(data)3 데이터 흐름
- 사용자가 Payload CMS에 로그인하면 JWT가 발급됩니다.
- Next.js 클라이언트는 이 JWT를 저장하고 Django API 호출 시 헤더에 포함시킵니다.
- Django는 JWT를 검증하여 요청 사용자의 권한과 조직 정보를 확인합니다.
- Django는 요청된 데이터를 필터링하여 반환합니다.

