аутентификация с таблицами соединений для нескольких имен пользователей или адресов электронной почты - PullRequest
0 голосов
/ 12 февраля 2020

Мне нужна помощь в разработке аутентификации (https://github.com/heartcombo/devise) для входов в систему.

В моем дизайне БД есть 3 таблицы, для которых требуется 2 объединения, поэтому он может использовать любые электронные письма пользователя для войти, используя один пароль.

profiles table
id
name

emails table
profile_id - foreign key from profiles table using has many
email

users table
profile_id - foreign key from profiles table using one-to-one relationship
encrypted_password

На данный момент я могу установить только 1 присоединение в условиях.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Предположим, у вас правильные модельные отношения.

if(email = Email.find_by(email: params[:email])).present?
  if(email.profile.users.where(encrypted_password: encrypt(params[:password])).count > 0)
    # login success
  else
    # wrong password
  end 
else
  # email not exists
end
0 голосов
/ 12 февраля 2020

Вы не предоставили никаких подробностей, за исключением того, что 2 таблицы имеют FK на треть. Поэтому я не могу предоставить больше подробностей в ответ. Но объединение всех трех - тривиальное упражнение. это придет в формате:

 select 
   from profiles p
   join emails   e on e.profile_id = p.profile_id 
   join users    u on u.profile_id = p.profile_id
  where e.email = <email_address_parameter>
    and encryption_routine(<password_value_parameter>) = u.encrypted_password;
...