使用/多个电子邮件设置登录

时间:2011-02-20 03:29:39

标签: ruby-on-rails devise

我将所有用户的电子邮件存储在一个单独的表中。每个用户都有很多电子邮件。我遇到的问题是如何设计使用这些电子邮件登录而不是查看用户表。我知道我需要在find_for_database_authentication方法中加入某种条件,但我似乎无法弄明白。我试过类似下面的东西,但没有运气:

login = conditions.delete(:login)
where(conditions).where(:emails => { :name => login }).first

2 个答案:

答案 0 :(得分:4)

不确定我是否以正确的方式做到了这一点,但我刚刚在config / initializers / devise.rb中创建了一个新策略

require 'devise/strategies/authenticatable'
module Devise
  module Strategies
    class MultipleEmailAuthenticatable < Authenticatable
      def authenticate!
        email = Email.find_by_email_address(authentication_hash[:email])
        unless email
          fail(:invalid)
          return
        end
        resource = valid_password? && email.member
        if validate(resource){ resource.valid_password?(password) }
          resource.after_database_authentication
          success!(resource)
        elsif !halted?
          fail(:invalid)
        end
      end
    end
  end
end

您在哪里覆盖find_for_database_authentication方法?

答案 1 :(得分:1)

是否可以使用电子邮件地址以外的其他内容登录?如果您允许用户使用用户名等登录,则会有devise wiki article on the subject