인프런 커뮤니티 질문&답변

TV 으악맨 (읅!)님의 프로필 이미지
TV 으악맨 (읅!)

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

장고에 JWT 토큰 발급 붙이기

email 또는 username으로 로그인하기

작성

·

146

0

이메일이면 이메일 아이디면 아이디 

장고에서는 2개이상의 필드에 대해서 로그인을 지원하지 않는다고 합니다

억지로 기능을 만들면 @ 가 있으면 쿼리셋 검색해서 username을 받아오는 느낌으로 쓰던데 무슨파일에서 하는지도 모르겟구요.. view나 serializer이려나..

그래서 최대한 장고에서 지원하는 email 필드의 유효성검사를 가져다 쓰면서 둘 혹은 이상의 유저정보로 로그인하는 방법을 구현한다면 어떻게 하면 좋을까요?

답변 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과 username을 같이쓰고싶어지면 기존 디비를 날릴수밖에없나여?

이진석님의 프로필 이미지
이진석
지식공유자

username을 같이 쓰다가 서비스 중에 email도 같이 로그인이 사용하는 경우는 없습니다. email 패턴이지만 모두 username일 것입니다.

하지만 db 스키마는 언제든 변경할 수 있으며, 장고도 이에 대응할 수 있습니다.

TV 으악맨 (읅!)님의 프로필 이미지
TV 으악맨 (읅!)

작성한 질문수

질문하기