设计:子域的用户

时间:2014-04-29 11:30:57

标签: ruby-on-rails devise

我想将用户限制为特定的子域,因为他需要再次注册不同的子域。 所以每个用户都有一个电子邮件和子域名。 我把唯一索引放在[: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

工作正常。

但是对于注册,要检查用户是否已经存在于具有相同子域的数据库中,我无法找到应该覆盖哪种方法。

有没有办法做到这一点?

1 个答案:

答案 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

因此,您可以删除可验证模块并使您拥有验证。