Разработать - как изменить настройки, чтобы адреса электронной почты не были уникальными - PullRequest
20 голосов
/ 17 августа 2011

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

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

Ответы [ 5 ]

48 голосов
/ 22 мая 2013

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

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
15 голосов
/ 17 августа 2011

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

config.authentication_keys = [ :username ]

1 голос
/ 18 августа 2011

Пожалуйста, найдите инструкции здесь

0 голосов
/ 24 октября 2016

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

0 голосов
/ 28 апреля 2013

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

Я использую старую версию 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...