пользовательская модель, делающая электронные письма уникальными, но не чувствительными к регистру? - PullRequest
0 голосов
/ 21 января 2020

, поэтому у меня есть пользовательская модель, позволяющая пользователям регистрироваться / входить в систему с использованием электронной почты вместо имени пользователя, проблема в том, что я беру электронное письмо, как оно введено в форму, и сохраняю, и моя модель назначает этому полю значение * 1001. * поэтому он чувствителен к регистру.

, поэтому вы видите проблему, если пользователь вводит верхний регистр электронной почты, он не может войти в систему, пока он не введет адрес электронной почты, аналогичный адресу электронной почты на странице регистрации.

my модель

class MyUser(AbstractUser):
    username =         None
    email =            models.EmailField(unique=True)   

форма

class SignupForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model =     MyUser
        fields =    ('email', 'password1', 'password2')

, и это представление для отправки электронных писем с подтверждением пользователям

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            mail_subject = 'Activate your Sentizer account.'
            message = render_to_string('acc_active_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid':urlsafe_base64_encode(force_bytes(user.pk)).decode(),
                'token':account_activation_token.make_token(user),
            })
            to_email = form.cleaned_data.get('email')
            email = EmailMessage(
                        subject=mail_subject, body=message, to=[to_email], reply_to=[to_email],headers={'Content-Type': 'text/plain'},
            )
            email.send(fail_silently=False)
            messages.info(request,"Please confirm your email to be able to login")
            return HttpResponseRedirect(reverse_lazy('accounts:login'))
    else:
        form = SignupForm()
    return render(request, 'accounts/signup.html', {'form': form})

и спасибо за вашу помощь.

1 Ответ

1 голос
/ 21 января 2020

Если преобразование адреса электронной почты в нижний регистр удобно для вас, вы можете просто сделать это. Итак, на ваш взгляд:

if form.is_valid():
    user = form.save(commit=False)
    user.is_active = False
    user.email = form.cleaned_data['email'].lower()
    user.save()
    # ...

Если вы сделаете это, вы должны убедиться, что при входе в систему адрес электронной почты, введенный пользователем в вашей форме регистрации, конечно же, будет преобразован в строчные буквы.

...