Завещание RoR: Регистрируйтесь с именем пользователя ИЛИ электронной почтой

Что лучший способ состоит в том, чтобы позволить пользователям войти в систему с их адресом электронной почты ИЛИ их именем пользователя? Я использую начальника + завещание для аутентификации. Я думаю, что, вероятно, не будет слишком трудно сделать это, но я предполагаю, что мне нужен некоторый совет здесь относительно того, куда поместить весь материал, который необходим. Возможно, завещание уже обеспечивает эту функцию? Как в config/initializers/devise.rb Вы записали бы:

config.authentication_keys = [ :email, :username ]

Потребовать и имени пользователя И электронной почты для регистрирования. Но я действительно хочу иметь только одно поле и для имени пользователя и для электронной почты и потребовать только одного из них. Я буду просто визуализировать это с некоторым ASCII-творчеством, оно должно выглядеть примерно так в представлении:

Username or Email:
[____________________]

Password:
[____________________]

[Sign In]
59
задан ZelluX 26 September 2011 в 03:29
поделиться

2 ответа

Я нашел решение проблемы. Я не совсем доволен им (я бы предпочел иметь возможность указать это в инициализаторе), но пока оно работает. В пользовательской модели я добавил следующий метод:

def self.find_for_database_authentication(conditions={})
  find_by(username: conditions[:email]) || find_by(email: conditions[:email])
end

Как отметили @sguha и @Chetan, еще один отличный ресурс доступен на официальной вики devise.

46
ответ дан 24 November 2019 в 18:26
поделиться
def self.find_for_authentication(conditions)
  conditions = ["username = ? or email = ?", conditions[authentication_keys.first], conditions[authentication_keys.first]]
  # raise StandardError, conditions.inspect
  super
end

Используйте их пример!

9
ответ дан 24 November 2019 в 18:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: