E-Mail Sign-Up и OAuth Log-In - как настроить его с помощью Devise on Rails
Я настроил Devise, чтобы пользователь мог зарегистрироваться по электронной почте. Теперь я включил вход через LinkedIn с помощью omniauth. Поэтому мне пришлось сохранить провайдера, а также UID в таблице пользователей.
Проблема, с которой я столкнулся, состоит в том, что комбинация провайдера и идентификатора пользователя должна быть уникальной. Но когда пользователь решает зарегистрироваться по электронной почте, у меня нет значений для провайдера и uid. Как я могу решить эту проблему хорошим способом?
Я новичок в Rails и не нашел других ответов на него.
Большое спасибо!
2 ответа
Я бы наверное заполнил manual
в провайдере и создать UID с SecureRandom.uuid
,
Вы могли бы сделать это в своем User
модель с использованием before_validation
крюк.
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_validation(on: :create) do
if self.provider.nil?
self.provider = 'manual'
self.uid = SecureRandom.uuid
end
end
...
end
Вы также можете подключиться к контроллеру, который создает пользователя.
Если вам нужен идентификатор, чтобы пользователь не мог дважды зарегистрироваться с одним и тем же адресом электронной почты, я бы использовал хэш sha256 адреса электронной почты.
Получи это от request.env['omniauth.auth']
Более подробная информация здесь: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview