我想将用户限制为特定的子域,因为他需要再次注册不同的子域。 所以每个用户都有一个电子邮件和子域名。 我把唯一索引放在[:email,:subdomain]
上用户模型
class User < ActiveRecord::Base
# TODO: :confirmable has been disabled for now.
devise :database_authenticatable, :validatable, :omniauthable, :registerable, :recoverable, request_keys: [ :subdomain ]
end
对于登录,我在我的用户模型中覆盖了“find_for_database_authetication”方法。
def self.find_for_database_authentication(warden_conditions)
where(:email => warden_conditions[:email], :subdomain => warden_conditions[:subdomain]).first
end
工作正常。
但是对于注册,要检查用户是否已经存在于具有相同子域的数据库中,我无法找到应该覆盖哪种方法。
有没有办法做到这一点?
答案 0 :(得分:1)
在模型中添加设计的可验证模块时,自动设计会添加以下验证:
devise/lib/devise/models/validatable.rb
# 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?
validates_uniqueness_of :email, 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
因此,您可以删除可验证模块并使您拥有验证。