Возможно ли иметь несколько паролей в authlogi c gem? - PullRequest
0 голосов
/ 23 апреля 2020

Сейчас у нас есть phone_number в качестве логина и sms-код (4 цифры) в качестве пароля. Когда пользователь хочет войти в систему:

- user enters phone number 
- we generate code
- we save code to user password field
- we send code to user via sms
- user uses this sms code to login in

Мы хотим, чтобы последние 3 сгенерированных кода (пароля) были действительными для входа в систему:

- we started to save generated codes in separate table

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

1 Ответ

0 голосов
/ 25 апреля 2020

Я нашел решение, которое помогло мне настроить логи проверки пароля c. У моей authlogic версии 3.5.6 и I есть метод, названный validate_by_password в следующей реализации. Я скопировал первую часть, чтобы сохранить пустые поля и проверки логики c. И переписал неверную проверку пароля так, как мне нужно.

class Client::Session < Authlogic::Session::Base

  ...

  def validate_by_password
    # copy paste from gem
    self.invalid_password = false

    # check for blank fields
    errors.add(login_field, I18n.t('error_messages.login_blank', default: 'cannot be blank')) if send(login_field).blank?
    errors.add(password_field, I18n.t('error_messages.password_blank', default: 'cannot be blank')) if send("protected_#{password_field}").blank?
    return if errors.count > 0

    # check for unknown login
    self.attempted_record = search_for_record(find_by_login_method, send(login_field))
    if attempted_record.blank?
      generalize_credentials_error_messages? ?
        add_general_credentials_error :
        errors.add(login_field, I18n.t('error_messages.login_not_found', default: 'is not valid'))
      return
    end


    # custom check for invalid password
    ...

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