TIL - Django

손성수·2023년 6월 30일
0

이메일 인증 유효성 검사

    @classmethod
    def validated_email(cls, email):
        """
        이메일 검증
        """
        if email is None:
            return False
        email_pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'
        email_match = re.match(email_pattern, email)
        return bool(email_match)
    @classmethod
    def validated_email_verification_code(cls, user, request_verification_code, mod):
        """
        이메일 인증 코드 유효성 검사
        """

        if user.login_type != "normal":
            # 소셜 로그인일 경우 이메일 인증이 필요 없음을 알림
            return [False, '소셜 로그인 계정 입니다.']
        try:
            # 사용자에게 등록된 이메일 인증번호 불러오기
            verification_code = user.email_verification.verification_code
        except users.models.EmailVerification.DoesNotExist:
            # 원투원 필드가 없을 경우 예외처리
            return [False, '인증 코드를 발급 받아 주세요.']

        if verification_code is None:
            # 인증 코드를 발급받지 않았을 경우 예외 처리
            return [False, '인증 코드를 발급 받아 주세요.']
        elif user.email_verification.authentication_type != mod:
            # 발급 받은 유형의 인증 코드를 다른 용도로 사용할 경우
            return [False, '현재 발급 받은 인증 코드 유형이 올바르지 않습니다.']
        elif not (timezone.now() - user.email_verification.updated_at) <= timedelta(minutes=5):
            # 인증 유효 기간이 지났을 경우 예외 처리
            user.email_verification.verification_code = None
            user.email_verification.save()
            return [False, '인증 코드 유효 기간이 만료되었습니다.']
        elif not verification_code == request_verification_code:
            # 사용자가 입력한 이메일 인증번호와, 등록된 이메일 인증번호가 일치하지 않을 경우 예외처리
            return [False, '인증 코드가 일치하지 않습니다.']
        else:
            return True
profile
더 노력하겠습니다

0개의 댓글