작성
·
146
답변 1
1
안녕하세요.
일반적으로 인증은 유저명/암호를 기반으로 수행이 됩니다. 필드는 username/password 필드이구요. email 필드는 단순히 이메일을 담을 목적의 필드일 뿐 로그인에 사용하지는 않습니다. username 필드는 unique=True 지정을 통해 유일성 체크와 db index도 생성이 되는 반면, email은 단순히 charfield이기에 인증에 사용하기에는 무리가 있습니다.
https://github.com/django/django/blob/3.0.14/django/contrib/auth/models.py#L325
username 필드라고 해서 이메일을 담지 못하는 것은 아닙니다. 서비스에 따라 username에 이메일을 담고자 하신다면 이메일을 담으시면 되구요. username에 대한 이메일 유효성 검사가 필요하시다면 로그인을 처리하는 Form 클래스에서 username 필드에 email 유효성 검사를 추가하실 수 있습니다.
그런데 username/email 필드를 따로 두고, 2개 모두에 대해서 로그인을 수행코자 하신다면, 장고 auth 앱의 기본 설계에서 벗어난 것입니다. 그렇다하더라도 LoginView와 AuthenticationForm을 분석하시고 상속받으셔서 커스텀하실 수 있습니다.
username을 같이 쓰다가 서비스 중에 email도 같이 로그인이 사용하는 경우는 없습니다. email 패턴이지만 모두 username일 것입니다.
하지만 db 스키마는 언제든 변경할 수 있으며, 장고도 이에 대응할 수 있습니다.
그럼 만약에 이미 username필드로 서비스하다가 나중에 email과 username을 같이쓰고싶어지면 기존 디비를 날릴수밖에없나여?