Как управлять пользователями, которые указали неправильный адрес электронной почты при регистрации, но сохранили в базе данных - PullRequest
0 голосов
/ 12 июня 2019

Я пишу код для регистрации пользователя.В моей функции «регистрация (запрос)», прежде чем я проверю электронную почту, я сохраняю пользователя, и он сохраняется в базе данных, но он не активен.Затем я использую этого пользователя, чтобы активировать его в своей функции «активировать (запрос)», и я активирую пользователя.Но есть проблема, если пользователь введет неправильный или не адрес электронной почты, он будет сохранен в базе данных, и это может занять бесполезное пространство памяти в базе данных.И другая проблема заключается в том, что если пользователь захочет исправить свою информацию на странице регистрации, он не сможет этого сделать, поскольку его имя пользователя и адрес электронной почты уже существуют в базе данных.

РЕДАКТИРОВАТЬ Сказать, что он вводит неправильный адрес электронной почты, - это в том случае, если он указал username@gmail.com вместо user_name@gmail.com.Адрес электронной почты введен в хорошем формате, но это не его адрес

def register(request):
    registered = False
    if request.method == 'POST':
        form = UserForm(data=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 = 'Activez votre compte acquisitor.'
            message = render_to_string('users/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(
                mail_subject, message, to=[to_email]
            )
            email.send()
            return render(request, 'users/mail_registration.html')
        else:
            print(form.errors)
    else:
        form = UserForm()
    return render(request, 'users/registration.html', {'user_form': form,
                                                'registered': registered})


def activate(request, uidb64, token, backend='django.contrib.auth.backends.ModelBackend'):
    try:
        uid = force_text(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except(TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None
    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        registered = True
        user.save()
        login(request, user, backend)
        return HttpResponseRedirect(reverse('index'))
    else:
        return HttpResponse("Lien d'activation invalide")

1 Ответ

1 голос
/ 12 июня 2019

если пользователь указал неправильный адрес электронной почты или нет

Ваша форма должна подтвердить, что поле электронной почты заполнено и, по крайней мере, формально правильно, поэтому единственная возможность состоит в том, что пользователь неправильно набрал свою электронную почту. Распространенное и эффективное решение (хотя и немного раздражающее с точки зрения пользователя) - поместить в форму 2 поля электронной почты и проверить, совпадают ли они в clean() данных формы.

На этом этапе, если пользователю все-таки удалось ошибиться, он все равно не получит письмо активации, поэтому вы мало что можете сделать, кроме как в конечном итоге добавить задание cron для удаления пользователей, которые никогда не активировали свои учетные записи ( на основе активного статуса, даты создания и даты последнего входа в систему).

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