Что лучший способ состоит в том, чтобы позволить пользователям войти в систему с их адресом электронной почты ИЛИ их именем пользователя? Я использую начальника + завещание для аутентификации. Я думаю, что, вероятно, не будет слишком трудно сделать это, но я предполагаю, что мне нужен некоторый совет здесь относительно того, куда поместить весь материал, который необходим. Возможно, завещание уже обеспечивает эту функцию? Как в config/initializers/devise.rb Вы записали бы:
config.authentication_keys = [ :email, :username ]
Потребовать и имени пользователя И электронной почты для регистрирования. Но я действительно хочу иметь только одно поле и для имени пользователя и для электронной почты и потребовать только одного из них. Я буду просто визуализировать это с некоторым ASCII-творчеством, оно должно выглядеть примерно так в представлении:
Username or Email:
[____________________]
Password:
[____________________]
[Sign In]
Я нашел решение проблемы. Я не совсем доволен им (я бы предпочел иметь возможность указать это в инициализаторе), но пока оно работает. В пользовательской модели я добавил следующий метод:
def self.find_for_database_authentication(conditions={})
find_by(username: conditions[:email]) || find_by(email: conditions[:email])
end
Как отметили @sguha и @Chetan, еще один отличный ресурс доступен на официальной вики devise.
def self.find_for_authentication(conditions)
conditions = ["username = ? or email = ?", conditions[authentication_keys.first], conditions[authentication_keys.first]]
# raise StandardError, conditions.inspect
super
end