[TIL #37] DRF 팀프로젝트 #3

안떽왕·2023년 5월 10일
0

Today I Learned

목록 보기
37/76

오늘은 각자 완성한 기능들을 병합하는 시간을 맞이했습니다. 먼저 회원관리 기능을 하신분을 시작으로 두 번째로 제가 만든 게시글 기능을 병합하고자 하였습니다.

각자 맡은 기능이 달랐기 때문에 다행히 충돌이 나는 코드는 많지 않아 금방 충돌을 잡을 수 있었습니다.

병합 이후 인증에러

병합을 진행하고 포스트맨을 이용해 다른 분이 작성해주신 회원가입과 로그인 기능을 먼저 테스트했습니다. 회원가입이 정상적으로 완료되고 DB에도 잘 저장이 되는 것을 확인했고, 토큰방식으로 진행한 로그인 또한 access,refresh 두 가지 모두 토큰값을 잘 보내주었습니다.

이후 access토큰을 가지고 제가 만든 게시글 기능에 대입해보려하는데 로그인을 해달라는 메세지가 출력되었습니다. 먼저 코드를 살펴보면

    def post(self, request):
        if not request.user.is_authenticated:
            return Response("로그인 해주세요", status=status.HTTP_401_UNAUTHORIZED)
        serializer = ArticleCreateSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(user=request.user)
            return Response(serializer.data, status=status.HTTP_200_OK)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

제가 작성한 코드는 다음과 같이 작성되어있고 해당 문구가 출력되었다는 것은 if not request.user.is_authenticated 이 if문에 돌입했기 때문입니다.

request.user.is_authenticated는 현재 요청한 사용자가 인증되어 있는지를 나타내는 불리언 값으로 인증에러는 즉 요청한 사용자가 인증되지 못했다는 것을 알게 되었습니다.

곧바로 jwt사이트에 가서 access토큰의 정보도 해독해서 보고 회원관리 코드를 쭉 훑어보고 하나씩 찍어보아도 도무지 종잡을 수 없었던 순간에 settings에서 답을 찾을 수 있었습니다.

해결

settings.py에 가보니 REST Framework에서 요청에 대한 은증을 처리하기 위한 코드가 빠져있는 것을 확인할 수 있었습니다.

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}

해당 코드를 추가하고 다시 인증을 해보니 이번에는 정상적으로 게시글이 작성되는 것을 확인할 수 있었습니다. 그 동안 app폴더에 있는 코드들만 주로 수정해봐서 setttings에서 수정한다는 생각을 쉽게 못하고 있었던 것 같습니다. 추후 인증관련 문제가 아니더라도 코드상에 큰 이상이 없다고 본다면 settings도 함께 검토해보겠습니다.

profile
이제 막 개발 배우는 코린이

0개의 댓글