TIL(22/11/22)

김규현·2022년 11월 24일
0

💻 Today I Learn

팀 프로젝트가 시작되고, 백엔드, 프론트에서 유저쪽을 담당하기로 했다.
소셜 로그인 기능을 구현하고 싶었지만, 현재 백엔드에서 카카오 API를 호출하여 카카오 계정으로 회원가입/로그인 후 access 발급까지 모두 백엔드에서만 이루어져 프로젝트의 프론트에서 해당 API를 연결할 수가 없었다.

우선 소셜 로그인 기능은 잠시 미뤄두고 회원 가입과 탈퇴 기능을 먼저 구현했다.

# views.py
class UserView(APIView):
    def post(self, request):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        
    def delete(self, request):
        user = request.user
        user.delete()
        return Response({"message": "회원 탈퇴 완료!"}, status=status.HTTP_200_OK)

# serializers.py
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = "__all__"

    def create(self, validated_data):
        user = User(
            email=validated_data["email"],
        )
        user.set_password(validated_data["password"])
        user.is_active = True
        user.save()
        return user

회원가입 및 탈퇴 버튼을 눌러 해당 url로 요청을 보낼 수 있도록 프론트에서 연결해주고, 요청이 들어오면 API가 실행되어 사용자로부터 전달받은 데이터를 serializer를 통해 검증 및 db에 저장을 한다.

회원탈퇴의 경우 로그인 된 이용자만 서비스를 이용할 수 있도록 설정해두었기 때문에 user=request.user로 지정하였고, 탈퇴 기능은 사용자에게 전달받는 데이터가 없기 때문에 serializer를 거치지 않고 db에서 바로 user를 삭제해주었다.

추가적으로 회원가입을 담당하는 serializer에서 user.is_active가 빠지면 회원가입 후 가입한 계정으로 로그인 했을 때 로그인이 되지 않는 현상이 발생한다.

이전에 is_active가 접속중을 의미하는 것이라 생각하여 제외하고 로직을 짰더니 회원가입만 되고 로그인이 되지 않았다.

is_active는 접속중을 의미하는 것이 아니라 유저를 활성화 시키는 것을 의미하여 회원가입을 하는 serializer에 꼭 넣어 주어야한다.

is_active를 활용해서 휴면 계정으로 전환하는 기능도 구현해볼 수 있겠다.

profile
웹개발 회고록

0개의 댓글