🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

안녕하세요 강사님 POSTMAN으로 API를 테스트해보려고 하는데 설정 관련하여 문의드립니다.

22.06.08 16:26 작성 조회수 379

0

- 여러분의 질문을 고대하고 있습니다. :-)
- 질문 전에 검색을 먼저 해보세요. 사람 사는 게 다 비슷하다는 것을 알게 됩니다.
- 예의는 거침없이 질문하기 위한 최고의 발명품입니다.
- 100개의 설명이 스크린샷 한방 보다 못할 수 있습니다.
- 코드를 첨부하면 전세계 누구나 이해할 수 있는 질문이 됩니다.
- 하나의 질문에는 하나의 주제를 담아야 답변도 예리해집니다.
- 시행착오를 알려주시면 곧 바로 원하는 문제에 집중할 수 있습니다.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
위와 같이 발급받은 토큰을 추가하고, 해당 주소로 요청을 보내면 위와 같은 에러메시지가 발생합니다. 아래는 해당 ViewSet이고요
class PostViewSet(ModelViewSet):
	queryset = Post.objects.all().filter(is_public=True)
	permission_classes = [IsAuthenticated,]
	authentication_classes = []
	parser_classes = [MultiPartParser, FormParser]
	serializer_class = PostSerializer

	def get_serializer_context(self):
		context = super().get_serializer_context()
		context["request"] = self.request
		return context

	def get_queryset(self):
		qs = super().get_queryset()
		qs = qs.filter(
			Q(author=self.request.user) |
			Q(author__in=self.request.user.following_set.all())
		)
		return qs

	def perform_create(self, serializer):
		serializer.save(author=self.request.user, ip=self.request.META['REMOTE_ADDR'])
		return super().perform_create(serializer)

	@action(detail=True, methods=["POST"])
	def like(self, request, pk):
		post = self.get_object()
		post.like_user_set.add(self.request.user)
		return Response(status.HTTP_201_CREATED)

	@like.mapping.delete
	def unlike(self, request, pk):
		post = self.get_object()
		post.like_user_set.remove(self.request.user)
		return Response(status.HTTP_204_NO_CONTENT)

 

위 POSTMAN 설정이 적용이 안돼는가 싶어 헤더에 직접

추가해서 사용해봤는데도 동일한 에러메시지가 발생합니다..

 

등록된 앱 

   # third party
    'debug_toolbar',
    'django_pydenticon',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.github',
    'rest_framework',
    'rest_framework.authtoken',
    'corsheaders',

DRF 설정

    'DEFAULT_PERMISSION_CLASSES' : [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ],

JWT 설정
JWT_AUTH = {
    'JWT_SECRET_KEY': SECRET_KEY,
    'JWT_ALLOW_REFRESH' : True,
    'JWT_ALGORITHM': 'HS256',
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=28),
}

CORS_ALLOWED_ORIGINS = [
    "http://localhost:3000",
]

답변 2

·

답변을 작성해보세요.

1

유형주님의 프로필

유형주

질문자

2022.06.08

ViewSet에 permission_classes=[IsAuthenticated]와 authentication_classes=[]를 

설정해서 조회가 안됐었나 봅니다..  답변 감사드립니다. !

1

안녕하세요.

JWT 토큰을 Authorization 헤더를 지정하실 때, 그 값 앞에 prefix를 지정합니다. 이 prefix 문자열은 사용하시는 jwt 라이브러리마다 다를 수 있으며, 커스텀 설정도 가능합니다.

프로젝트에 설정된 jwt token prefix를 맞게 지정해주셔야 jwt 토큰 확인 프로세스가 진행이 될 것입니다. 보여주신 스샷에서는 "Token" 이라고 지정하셨는 데 이 값이 생각하신 값이 맞는 지요?

djangorestframework-jwt 라이브러리에서는 prefix 값의 디폴트는 "JWT" 입니다. 아래 웹페이지에서 디폴트 값을 확인해보세요.

https://jpadilla.github.io/django-rest-framework-jwt/#additional-settings

다른 라이브러리인 djangorestframework-simplejwt에서는 prefix 값의 디폴트는 "Bearer" 입니다.

현재 사용하시는 라이브러리와 설정을 잘 확인해주세요.

화이팅입니다. :-)

채널톡 아이콘