Ответ 1
Посмотрите config/initializers/devise.rb
. Вы можете изменить ключ аутентификации по умолчанию, который по умолчанию :email
должен быть любым, например:
config.authentication_keys = [ :username ]
Я установил Devise для входа в систему с именем пользователя вместо адреса электронной почты, потому что значительное число наших пользователей совместно используют один и тот же адрес электронной почты со своим супругом. Это уникальный рынок, который мы обслуживаем. Но каждый супруг нуждается в отдельных учетных записях для записи результатов индивидуального инструмента.
В базе данных больше не требуется уникальный адрес электронной почты, поэтому он будет принимать один и тот же адрес электронной почты для двух учетных записей. Тем не менее, Devise по-прежнему требует уникальный адрес электронной почты для каждой учетной записи. Есть ли настройка или работа вокруг, которую я могу использовать, чтобы изменить это?
Посмотрите config/initializers/devise.rb
. Вы можете изменить ключ аутентификации по умолчанию, который по умолчанию :email
должен быть любым, например:
config.authentication_keys = [ :username ]
= Модель пользователя
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
Ниже приведены инструкции
Если вы хотите удалить uniqueness validation
, заданный devise
и сохранить остальные, см. this (для rails
>= 4.1.6).
Итак, это действительно старый... но я думал, что я бы ответил.
Я использую старую версию 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
Это также потребовало перехода в базу данных и изменения индекса в столбце электронной почты, который установлен на уникальный из коробки.