我设置Devise使用用户名而不是电子邮件地址登录,因为我们的大量用户与他们的配偶共享同一个电子邮件地址。这是我们服务的独特市场。但每个配偶都需要单独的账户来记录个性工具的结果。
数据库不再需要唯一的电子邮件地址,因此它将接受两个帐户的相同电子邮件地址。但是,Devise仍然需要为每个帐户提供唯一的电子邮件地址。是否有可以用来改变它的设置或解决方法?
答案 0 :(得分:47)
=用户模型
def email_required?
false
end
def email_changed?
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
答案 1 :(得分:15)
查看config/initializers/devise.rb
。您可以将默认身份验证密钥更改为:email
,默认情况下为{1}},例如:
config.authentication_keys = [ :username ]
答案 2 :(得分:1)
请查看说明here
答案 3 :(得分:0)
如果您只想删除uniqueness validation
提供的devise
并保留其他rails
,请参阅this(适用于[a-z]
&gt; = 4.1.6)。
答案 4 :(得分:-1)
所以,这真的很古老......但我想我会回应。
我正在使用旧版本的设计(1.4.9),但是,通过freenode上#rubyonrails的一些帮助,我发现你必须编辑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
这也需要进入数据库并更改电子邮件列上的索引,该列设置为开箱即用的唯一。