Я пытаюсь реализовать двухфакторную аутентификацию на Devise , используя Gem devise-two-factor .Я хочу, чтобы Аутентификация проходила в 2 этапа, во-первых, я собираюсь спросить имя пользователя и пароль.если пользователь пропустит этот шаг, он будет перенаправлен на следующую страницу OTP, если 2FA активирован, иначе сеанс будет проверен Devise.
Если пользователь выбрал 2FA, тогда я хочу использовать Devise длявыполнить всю аутентификацию и не использовать функцию sign_in (user) для создания сеанса, если user.validate_and_consume_otp (CURRENT_OTP) имеет значение true.Я хочу передать имя пользователя пароль и OTP в Devise в качестве параметров, чтобы Devise без моего вмешательства обрабатывал аутентификацию всех трех параметров.
Для этого я разработал несколько рабочих процессов: -
Если имя пользователя и пароль действительны и правильны, я передам их как параметры поста, а имя пользователя и пароль - как скрытые поля вместе с OTP, который пользователь заполнит, а после отправки эти три параметра будутотправлено в Devise для проверки.
Сначала я проверяю имя пользователя, существует ли оно в таблице пользователей, или нет. Если оно существует, я проверяю действительный пароль с помощью функции Devise по умолчанию user.valid_password? ("YOUR_PASSWORD_COMES_HERE"), если оба эти условия выполняются, я буду передавать электронную почту пользователя в качестве переменной сеанса на следующий шаг, а на втором шаге я проверяю только правильную OTP (так как проверка имени пользователя и пароля выполняется на шаге 1), если OTPправильно, мы создаем сеанс для пользователя с электронной почтой, переданной как SesПеременная sion и Delete Session после успешного входа в систему, в противном случае мы снова запросим OTP.
Можете ли вы предложить какой-либо лучший рабочий процесс?