Подтвердить что ты не робот

Devise - как изменить настройку, чтобы адреса электронной почты не были уникальными

Я установил Devise для входа в систему с именем пользователя вместо адреса электронной почты, потому что значительное число наших пользователей совместно используют один и тот же адрес электронной почты со своим супругом. Это уникальный рынок, который мы обслуживаем. Но каждый супруг нуждается в отдельных учетных записях для записи результатов индивидуального инструмента.

В базе данных больше не требуется уникальный адрес электронной почты, поэтому он будет принимать один и тот же адрес электронной почты для двух учетных записей. Тем не менее, Devise по-прежнему требует уникальный адрес электронной почты для каждой учетной записи. Есть ли настройка или работа вокруг, которую я могу использовать, чтобы изменить это?

4b9b3361

Ответ 1

Посмотрите config/initializers/devise.rb. Вы можете изменить ключ аутентификации по умолчанию, который по умолчанию :email должен быть любым, например:

config.authentication_keys = [ :username ]

Ответ 2

= Модель пользователя

def email_required?
  false
end

def email_changed?
  false
end

# For ActiveRecord 5.1+
def will_save_change_to_email?
  false
end

= Миграция

rails g migration update_index_on_users
def up
  sql = 'DROP INDEX index_users_on_email'
  sql << ' ON users' if Rails.env == 'production' # Heroku pg
  ActiveRecord::Base.connection.execute(sql)
end

Ответ 3

Ниже приведены инструкции

Ответ 4

Если вы хотите удалить uniqueness validation, заданный devise и сохранить остальные, см. this (для rails >= 4.1.6).

Ответ 5

Итак, это действительно старый... но я думал, что я бы ответил.

Я использую старую версию devise (1.4.9), но, используя некоторую помощь в #rubyonrails на freenode, я обнаружил, что вам нужно отредактировать lib/devise/models/validatable.rb:

module Devise
  module Models
    module Validatable
      # All validations used by this module.
      VALIDATIONS = [ :validates_presence_of, :validates_uniqueness_of, :validates_format_of,
                      :validates_confirmation_of, :validates_length_of ].freeze

      def self.included(base)
        base.extend ClassMethods
        assert_validations_api!(base)

        base.class_eval do
          validates_presence_of :email, :if => :email_required?
          # commented out so that we don't check for unique emails
          #validates_uniqueness_of :email, :case_sensitive => (case_insensitive_keys != false), :allow_blank => true, :if => :email_changed?
          validates_format_of :email, :with => email_regexp, :allow_blank => true, :if => :email_changed?

          validates_presence_of :password, :if => :password_required?
          validates_confirmation_of :password, :if => :password_required?
          validates_length_of :password, :within => password_length, :allow_blank => true
        end
      end
    end
  end
end

Это также потребовало перехода в базу данных и изменения индекса в столбце электронной почты, который установлен на уникальный из коробки.