使用Devise在Rails 4中使用外部模型进行自定义身份验证

时间:2013-07-19 01:25:29

标签: ruby-on-rails devise ruby-on-rails-4

我有一个典型的用户模型(包含用户名,电子邮件和密码字段) has_one客户端模型有很多手机型号。< / p>

我想要做的是允许用户使用电子邮件+密码,用户名+密码或其中一个电话号码+密码进行登录。

如何使用Devise实现这一目标?

1 个答案:

答案 0 :(得分:0)

为了实现这一目标,我必须将以下内容添加到用户模型中:

  attr_accessor :login

  private

  def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      match = where(conditions).where(
        ["lower(email) = :login OR lower(username) = :login",
         { login: login.downcase }]).first

      unless match
        match = joins(client: :phones).where(conditions).where(
          ["lower(client_phones.number) = :phone",
           { phone: PhoneFormatter.parse(login) }]).first
      end

      find(match.id) if match
    else
      where(conditions).first
    end
  end