작성
·
450
0
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
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" 입니다.
현재 사용하시는 라이브러리와 설정을 잘 확인해주세요.
화이팅입니다. :-)