From 7a7c4e9c71434fc8c629b5eed122e15035700316 Mon Sep 17 00:00:00 2001 From: sm4640 Date: Tue, 6 May 2025 20:04:49 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix:=20[#48]=20user=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=A4=91=EB=B3=B5=20=EC=B2=B4=ED=81=AC=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=20=EB=B6=84=EB=A6=AC=20api=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- users/views.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/users/views.py b/users/views.py index 3c10136..d51fbe5 100644 --- a/users/views.py +++ b/users/views.py @@ -4,7 +4,7 @@ from django.shortcuts import get_object_or_404 from rest_framework.views import APIView from rest_framework.viewsets import ReadOnlyModelViewSet -from rest_framework_simplejwt.serializers import TokenObtainPairSerializer, TokenRefreshSerializer +from rest_framework_simplejwt.serializers import TokenObtainPairSerializer, TokenRefreshSerializer, TokenObtainSerializer from rest_framework_simplejwt.tokens import RefreshToken from rest_framework_simplejwt.exceptions import TokenError, InvalidToken @@ -53,8 +53,12 @@ class JoinAPIView(APIView): def post(self, request): serializer = JoinSerializer(data=request.data) if serializer.is_valid(): - serializer.save() - res = Response({"message": "회원가입이 완료되었습니다."}, status=status.HTTP_200_OK) + user = serializer.save() + access = str(RefreshToken.for_user(user).access_token) + res = Response({ + "message": "회원가입이 완료되었습니다.", + "access": access + }, status=status.HTTP_200_OK) return res return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @@ -95,18 +99,22 @@ class LoginAPIView(APIView): else: # id, 비번 둘 중 하나가 틀렸을 때 return Response({"message": "아이디 혹은 비밀번호가 맞지 않습니다."}, status=status.HTTP_400_BAD_REQUEST) -class NicknameAPIView(APIView): +class CheckUserFieldDuplicateAPIView(APIView): permission_classes = [AllowAny] - # 닉네임 중복 체크 + # 유저 필드 중복 확인 def get(self, request): - nickname = request.GET.get('nickname', None) - if not nickname: - return Response({"message": "닉네임을 입력하세요."}, status=status.HTTP_400_BAD_REQUEST) + field = request.query_params.get('field') + value = request.query_params.get('value') + if not field or not value: + return Response({"message": "올바르지 않은 요청입니다."}, status=status.HTTP_400_BAD_REQUEST) try: - get_object_or_404(User, nickname=nickname) - return Response({"message": "해당 닉네임은 사용할 수 없습니다."}, status=status.HTTP_400_BAD_REQUEST) - except: - return Response({"message": "사용할 수 있는 닉네임입니다."}, status=status.HTTP_200_OK) + if CheckUserFieldDuplicateService.check_duplicate(field, value): + return Response({"message": f"존재하는 {field} 입니다."}, status=status.HTTP_400_BAD_REQUEST) + else: + return Response({"message": f"사용해도 되는 {field} 입니다."}, status=status.HTTP_200_OK) + except ValueError as e: + return Response({"message": str(e)}, status=status.HTTP_400_BAD_REQUEST) + class TagUserAPIView(APIView): def get(self, request):