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):