인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

Young님의 프로필 이미지
Young

작성한 질문수

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

커스텀 유저 지정 및 회원가입 구현

Username 대신 email 주소로 회원가입 및 로그인

작성

·

240

0

안녕하세요!

유저이름 대신 이메일로 회원가입 및 시도를 할 수 있도록 하게 하려면 어떤 식으로 코드를 수정해야할까요?

class SignupForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['email'].required = True
self.fields['first_name'].required = True
self.fields['last_name'].required = True

class Meta(UserCreationForm.Meta):
model = User
fields = ['username', 'email', 'first_name', 'last_name']

def clean_email(self):
email = self.cleaned_data.get('email')
if email:
qs = User.objects.filter(email=email)
if qs.exists():
raise forms.ValidationError("already exists")
return email

구글링을 통해 AbstractBaseUser를 통해 적용하는 법을 보았는데(https://swarf00.github.io/2018/12/07/registration.html#%EC%9E%A5%EA%B3%A0-auth-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EC%86%8C%EA%B0%9C),

위 링크에서는 AbstracBaseUser를 활용하여, 현재 진행중인 프로젝트에 바로 적용에는 한계가 있는 것 같습니다. 추천해주실 방법이 있다면 소개 부탁드립니다. 

답변 1

0

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

안녕하세요.

로그인 시에는 현재 프로젝트에 활성화된 User 모델의 username  필드와 password 필드를 활용하게 됩니다. email 필드가 있더라도 이는 단순히 email 포맷의 필드를 저장하는 필드 일 뿐, db_index나 unique 옵션도 지정되어있지 않습니다. 단순히 blank=True 만 지정되어있거든요. 그러니 로그인 시에 사용할 수 있는 필드가 아닙니다. 물론 커스텀 User 모델을 정의하시어 변경하실 수는 있지 만요.

이메일로 가입/로그인을 하실려면, username 필드를 그대로 활용하시면 됩니다. username 필드이지만, 회원 가입 시에 email 포맷으로 입력을 받도록 유효성 검사 로직만 추가해주시면 되는 거죠. 이를 위해 User 모델은 그대로 두시더라도, SignupForm과 로그인폼에 유효성 검사 및 label/help_text 정도만 변경해서 처리해보실 수 있습니다.

Young님의 프로필 이미지
Young

작성한 질문수

질문하기