Временный пароль электронной почты

#python #django

#python #django

Вопрос:

Привет, я новичок в django и веб-программировании. Я создаю веб-сайт для своей школы, который позволяет учащимся назначать онлайн-консультации.

Мне нужно иметь возможность отправлять временные коды доступа учащимся по электронной почте на их электронные письма, а затем проверять их на следующей странице. У меня есть форма электронной почты :

 
    class EmailForm(forms.Form):
    student_email = forms.EmailField(max_length = 200, label = 'Mail')
    def clean_student_email(self):
        student_email = self.cleaned_data['student_email']
        if not student_email.endswith('.edu'):
                raise ValidationError("Please enter your school email that ends with @edu")
        return student_email

  

и представление входа в систему

 
    def login(request):
    if request.method == 'POST':
        form = EmailForm(request.POST)
        if form.is_valid():
            student_email = form.cleaned_data['student_email']
            random_code = get_random_string()
            subject = "Temporary Advising Code"
            message = f'Your temporary code is: n code: {random_code}'
            send_mail(subject, message, 'advising email', [student_email])
            return HttpResponseRedirect('/enter_code/', {'form' : form})
        
    else:
        form = EmailForm()
    return render(request, 'login/login.html', {'form' : form})

  

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

Комментарии:

1. Вы храните его в модели, значит, в базе данных?

2. Я не сохраняю его в модели, мне не нужно создавать пользователя для ученика. Это просто для проверки того, что человек, назначающий встречу, является учеником нашей школы.

3. вам не нужно хранить его в Student модели и т. Д. Но Если вы хотите сохранить данные, вам необходимо сохранить их в базе данных.

4. Итак, единственный способ сделать это — сохранить временный пароль в базе данных? Нет способа сделать это, вернув контекст формы {‘form’: form} с помощью HttpResponseRedirect ?

Ответ №1:

Я бы посоветовал против вашего подхода.

Но я бы посоветовал проверить, как работает генератор токенов сброса пароля в django.

Источник: PasswordResetTokenGenerator

Вы можете сделать что-то очень похожее, чтобы сгенерировать токен, который вы будете отправлять учащимся.

Вам не нужно хранить такой токен, так как вы можете легко сгенерировать его снова (когда дело доходит до проверки).

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

Вы даже можете включить время истечения срока действия, если это необходимо.

И вам также не нужно генерировать временный пароль (что мне не очень нравится).

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

Комментарии:

1. Я. Я знаю, что назвал свой вид плохо, потому что я на самом деле не регистрирую пользователей. Все, что я хочу сделать, это отправить учащемуся случайную строку на его электронные письма. Затем на следующей странице я хочу, чтобы они ввели этот код. У меня нет или я не хочу создавать пользователей-студентов. Я просто хочу убедиться, что человек, пытающийся получить доступ к форме консультирования, является учащимся нашей школы. В настоящее время я могу отправить электронное письмо с кодом, но я не знаю, как проверить этот код на следующей странице.

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