Я тоже сегодня сталкивался с этой проблемой.Я думаю, что справлюсь с этим следующим образом:
Я буду просить пользователя при входе в систему указать его адрес электронной почты и пароль, как в традиционной настройке аутентификации, где я пытаюсь получить письмо от службы OmniAuth.пользователь выбрал (FB, Twitter, ...).Таким образом, они должны предоставить электронную почту, только если она не предоставлена провайдером аутентификации.Затем, если пользователь войдет позже с тем же провайдером, которого он использовал для регистрации, он сразу же войдет в систему.Это, вероятно, произойдет в 99% всех случаев.
Однако, имея электронную почту и пароль пользователя, я также могу обрабатывать все виды случаев, которые могут возникнуть (включая описанный вами):
Исходный поставщик проверки подлинности не работает или пользователь удалил свою учетную запись поставщика проверки подлинности -> Решение. Пользователь может войти в систему традиционным способом, используя свой адрес электронной почты и пароль.(Обратите внимание, что это важный случай, который я еще нигде не упоминал в сети. Люди, кажется, полагают, что FB, Twitter и т. Д. Будут существовать вечно, никогда не будут закрыты, и пользователи никогда не закроют свои учетные записи суслуги. Не сохраняя пользователей pw и email, вы потеряете все свои учетные записи, которые были созданы провайдером в случае возникновения одного из этих случаев, так как вы больше не можете сопоставить их с пользователями. Для меня это неприемлемая зависимость отвнешняя служба.)
Пользователь регистрируется позже с другим поставщиком аутентификации (это ваш случай) -> Решение. Попробуйте сопоставить пользователя с существующей учетной записью, используя его электронную почту, еслиесли это не удалось, отобразите форму регистрации с помощью кнопки / ссылки «У меня уже есть аккаунт, войдите в систему» (или аналогичного ;-).Если они нажимают это, они должны предоставить свой адрес электронной почты и пароль.Затем, если они успешно проходят аутентификацию, вы можете просто добавить этого провайдера в существующую запись пользователя, и в следующий раз они сразу же войдут в систему, как и в случае с провайдером, которого они первоначально использовали для регистрации ...
Может быть, есть и другие случаи, которые могут произойти.Любая обратная связь?