Вероятно, вам нужно изменить метод 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
Я пишу, что на самом деле не проверяя его, поэтому возьмите его с крошкой соли, но у вас должно быть общее представление о том, как вы можете решить вашу проблему.