Разработать логин с несколькими электронными письмами - PullRequest
1 голос
/ 20 февраля 2011

Я храню все электронные письма своих пользователей в отдельной таблице. Каждый пользователь имеет по электронной почте. Проблема, с которой я столкнулся, заключается в том, чтобы заставить devise использовать эти письма для входа в систему, а не просматривать таблицу пользователей. Я знаю, что мне нужно поместить какое-то условие в мой метод find_for_database_authentication, но я не могу понять это. Я попробовал что-то вроде следующего, но безуспешно:

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

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

Не уверен, что я сделал это правильно, но я только что создал новую стратегию в 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 голос
/ 22 февраля 2011

Можно ли использовать что-то кроме адресов электронной почты для входа?Если бы вы могли позволить пользователям входить в систему с именем пользователя или чем-то в этом роде, то существует разработка вики-статьи на эту тему .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...