작성
·
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 정도만 변경해서 처리해보실 수 있습니다.