Так я видел, как это делается в большинстве примеров в Интернете
в основном, когда вы регистрируетесь по электронной почте + пароль, вы создаете строку непосредственно для модели пользователя (не касаясь модели Authent.), А при регистрации в Omniauth вы создаете новую аутентификацию, которая связывается с моделью пользователя.
И в основном при следующем входе в систему вы делаете что-то вроде этого:
if (user.password == 'xxx')
login
elsif user.authentication.uid == 'xxx'
login
else
'hello signup !'
end
так что вы переключаетесь между двумя моделями и изнасилуете (простите за термин), что пользовательская модель должна содержать только пользовательскую информацию
Решение, в некотором смысле, я считаю правильным (из моего опыта и бесед с моими коллегами, но я все еще не уверен на 100%, что это правильный ответ)
как видите, даже пользователь + пароль проходит через Authent. модель, это означает, что пользователь + пароль на сайте выступает в роли поставщика самостоятельно
так, чтобы быть абсолютно правильным, это должно выглядеть так
регистрация с FB : вы сохраняете идентификатор FB и authKey в таблице аутентификации, затем создаете пользователя
регистрация с паролем: вы создаете новую строку в таблице AppPass, затем создаете строку в таблице аутентификации (поскольку доступ к провайдеру фактически является вашим приложением), а затем вы создаете пользователя
Почему?
потому что теперь, когда пользователь входит в систему, всегда происходит через Authent. модель, не устанавливающая условия между двумя моделями (модель Authent. и User)
теперь может кто-нибудь сказать, пожалуйста ... это хороший подход: D?