T.I.L July 06, 2023 - [DRF]간단한 계정 찾기(계정 재활성화)로직 구현
2023. 7. 7. 00:08ㆍT.I.L (Today_I_Learned)
탈퇴(계정 비활성화)인 유저가 탈퇴 계정으로 로그인을 시도할 때
코드
class CustomTokenObtainPairView(TokenObtainPairView):
permission_classes = [AllowAny]
serializer_class = CustomTokenObtainPairSerializer
def post(self, request):
user = User.objects.get(email=request.data['email'])
is_withdrawal=user.withdrawal
if is_withdrawal == True:
user.withdrawal = False
user.is_active = True
user.save()
return Response({"withdrawal_true": "계정이 재활성화 되었습니다. 로그인을 진행해 주세요!"}, status=status.HTTP_423_LOCKED)
return super().post(request)
간단하게 구성해 본 로직입니다.
문제점
1. 본인임을 인증하는 로직이 추가되면 좋겠습니다.
2. 예외처리가 더 필요합니다.
탈퇴(계정 비활성화)인 유저가 탈퇴 계정으로 회원가입에 필요한
이메일 인증을 시도할 때
코드
# views.py
class SendSignupEmailView(APIView):
permission_classes = [AllowAny]
def post(self, request):
try:
user = User.objects.get(email=request.data['email'])
if user.withdrawal == True:
user.withdrawal = False
user.is_active = True
user.save()
return Response({"withdrawal_true": "계정이 재활성화 되었습니다. 로그인을 진행해 주세요!"}, status=status.HTTP_423_LOCKED)
else:
raise User.DoesNotExist
except User.DoesNotExist:
serializer = SendSignupEmailSerializer(
data=request.data, context={"request": request})
if serializer.is_valid():
return Response({"message": "이메일 인증코드를 회원님의 이메일 계정으로 발송했습니다. 확인 부탁드립니다!"}, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# serializers.py
class SendSignupEmailSerializer(serializers.Serializer):
email = serializers.EmailField(
error_messages={
"required": "이메일을 입력해주세요.",
"blank": "이메일을 입력해주세요.",
}
)
time_check = serializers.IntegerField()
class Meta:
fields = ("email", "date")
def validate(self, attrs):
email = attrs.get("email")
time_check = attrs.get("time_check")
verification_code = VerificationCodeGenerator.verification_code(
email, time_check)
try:
User.objects.get(email=email)
raise serializers.ValidationError(
detail={"email": "이미 존재하는 계정의 이메일 주소입니다."})
except User.DoesNotExist:
email_body = "아래 인증코드를 인증코드 작성란에 기입해주세요. \n " + verification_code
message = {
"email_body": email_body,
"to_email": email,
"email_subject": "EcoCanvas 이메일 인증 코드",
}
Util.send_email(message)
return super().validate(attrs)
문제점
1. 본인임을 인증하는 로직이 추가되면 좋겠습니다.
2. 예외처리가 로그인 로직보다는 개선 되었지만 조금 더 개선하면 좋겠습니다.
'T.I.L (Today_I_Learned)' 카테고리의 다른 글
T.I.L July 03, 2023 - [DRF] JWT refresh 토큰 쿠키에 저장하고 활용하는 로직 구성 중 발생한 트러블 (0) | 2023.07.03 |
---|---|
T.I.L June 26, 2023 (최종 프로젝트 중간 발표 후 KPT 회고) (0) | 2023.06.26 |
T.I.L June 19, 2023 - Git soft reset (0) | 2023.06.19 |
T.I.L June 14, 2023 (DRF 프로젝트에 logging 적용) (0) | 2023.06.14 |
T.I.L June 13, 2023 (DB 개발/배포 환경에 따라 자동 설정) (0) | 2023.06.13 |