Как реализовать проверку на основе OTP, прежде чем позволить пользователю создать новый пароль с помощью pyotp?

#python #django #django-rest-framework #django-views #forgot-password

Вопрос:

Я очень новичок в рамках Django rest. Я создаю API для своего мобильного приложения. В модуле «Забыли пароль» у меня есть следующий поток

  1. Попросите пользователя ввести мобильный
  2. проверьте наличие
  3. Если существует — > отправить OTP
  4. Подтвердите и позвольте пользователю создать новый пароль.

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

Когда один пользователь запрашивает otp и ждет его подтверждения, в то время как другой пользователь запрашивает OTP В это время, как обращаться с обоими пользователями? Я подумал о

  1. создание словаря и сохранение идентификатора пользователя в качестве ключа и otp в качестве значения в views.py для проверки конкретного пользователя.
  2. временно храните otp до тех пор, пока он не подтвердится.

Какой безопасный способ и какая альтернатива для такого сценария?

Ответ №1:

Вы должны создать таблицу, которая будет выглядеть следующим образом:

 ===== UserOTP =====
user: foreign-key to user
code: CharField, random generated code here (or token)
create_date: auto-fill created datetime
used_date: nullable datetime field
 

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

А затем на другой конечной точке получите код от пользователя и проверьте его (на срок действия и использовался ранее, принадлежит этому пользователю и т. Д.), Затем продолжите процесс сброса пароля.