-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
안녕하세요 강사님 POSTMAN으로 API를 테스트해보려고 하는데 설정 관련하여 문의드립니다.
22.06.08 16:26 작성 조회수 379
0
- 질문 전에 검색을 먼저 해보세요. 사람 사는 게 다 비슷하다는 것을 알게 됩니다.
- 예의는 거침없이 질문하기 위한 최고의 발명품입니다.
- 100개의 설명이 스크린샷 한방 보다 못할 수 있습니다.
- 코드를 첨부하면 전세계 누구나 이해할 수 있는 질문이 됩니다.
- 하나의 질문에는 하나의 주제를 담아야 답변도 예리해집니다.
- 시행착오를 알려주시면 곧 바로 원하는 문제에 집중할 수 있습니다.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
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",
]
답변을 작성해보세요.
1
유형주
질문자2022.06.08
ViewSet에 permission_classes=[IsAuthenticated]와 authentication_classes=[]를
설정해서 조회가 안됐었나 봅니다.. 답변 감사드립니다. !
1
이진석
지식공유자2022.06.08
안녕하세요.
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" 입니다.
현재 사용하시는 라이브러리와 설정을 잘 확인해주세요.
화이팅입니다. :-)
답변 2