본문 바로가기

[내일배움캠프]스파르타코딩클럽 AI 웹개발/Today I Learned

[TIL] username없이 이메일 회원가입

username 없이 이메일로 회원가입을 시도했지만 다음과 같은 오류가 발생하였다

 

 

장고에서 제공해주는 create_user()는 필수적으로 username이 있어야 했기 때문에 발생하는 오류였다.

따라서 create_user 메소드를 재정의하여 문제를 해결하였다

 

 

accounts/models.py

class UserManager(BaseUserManager):
    def create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError({"email": "이메일은 필수 입력항목입니다."})
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save()
        return user

 

BaseUserManager를 상속받아 UserManager를 만들어 주고 create_user를 정의해주었다

그리고 AbstractUser를 상속받은 커스컴 유저 모델에서 다음과 같이 작성해주었다

 

class User(AbstractUser):
    ...

    # 비활성화 필드
    username = None
    ...

    # 필수 필드
    email = models.EmailField(unique=True, blank=False)
    USERNAME_FIELD = "email"  # uesrname 대신 email을 ID로 사용
    REQUIRED_FIELDS = []
    objects = UserManager()  # custom UserManager 사용을 명시함
    ...