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

У меня есть вход в систему с 3 полями: организация (строковый идентификатор), адрес электронной почты и пароль.

В модели моего пользователя есть столбец с именем organization_id, в котором указывается, к какой организации он принадлежит.

Я уже могу войти, используя идентификатор компании, в форме входа.Однако мне нужно разрешить пользователям входить в систему, используя название организации.Информация, которая принадлежит модели организации.

Есть ли в любом случае, что я могу перехватить ввод от пользователя, прежде чем он аутентифицируется, поэтому я могу искать в базе данных, используя ввод имени организации, и заменить его наидентификатор организации, поэтому он аутентифицируется более дружественным образом?

1 Ответ

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

Вероятно, вам нужно изменить метод find_for_database_authentication, который включен в User при использовании Devise.

Здесь используется метод, когда мы пытаемся найти ресурс и аутентифицировать его -> https://github.com/plataformatec/devise/blob/master/lib/devise/strategies/database_authenticatable.rb#L10

Когда мы пойдем дальше и проверим его, мы увидим, что он на самом деле использует метод find_for_authentication из модуля Authenticatable.

Который, в свою очередь, использует метод find_first_by_auth_conditions.

Все эти вызовы проходят по тем же ключам, которые используются для поиска ресурса.

В самом простом сценарии это ключ :email, который передается в параметрах запроса, но мы можем изменить его

Давайте изменим метод find_for_database_authentication, чтобы мы сначала проверили параметры, и если ключ :organization_name (я предполагаю, что это не то, как вызывается параметр), то мы будем использовать эту информацию для поиска ресурса.

def find_for_database_authnetication(conditions)
  if !condition[:organization_name].blank?
    org = Organization.find_by(name: conditions[:organization_name])
    org.users.find_by(conditions[:email])
  else
    super
  end
end

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

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