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

Другие вопросы по тегам