Точно так же, как работает большинство веб-сайтов, я должен был хранить «UsErNaMe» в базе данных, но позволять пользователям входить в систему с «username».
Это довольно очевидная и необходимая функция, и многие люди, кажется, спрашивали об этом, но решение, на которое я постоянно натыкаюсь, похоже, не связано с собственной документацией Devise.
Например, рассмотрим этот пост в блоге: http://anti-pattern.com/2011/5/16/case-insensitive-keys-with-devise
[...] вы, вероятно, столкнулись с проблемой, которую некоторые пользователи любят набирать определенные буквы в своих логинах (email и/или логин) в верхнем регистре, но ожидайте, что регистр не будет учитываться, когда они попытаются войти в систему. необоснованная просьба[...]
Круто! Это то, что я хочу.
Его решение:
# config/initializers/devise.rb
Devise.setup do |config|
config.case_insensitive_keys = [:email, :username]
end
Это решение я продолжаю находить. Но вот документация по этому параметру конфигурации:
# Configure which authentication keys should be case-insensitive.
# These keys will be downcased upon creating or modifying a user and when used
# to authenticate or find a user. Default is :email.
config.case_insensitive_keys = [ :username, :email ]
В частности: «Эти ключи будут переведены в нижний регистр при создании/изменении пользователя». Другими словами, имя пользователя занижается в базе данных.
Для проверки:
User.create username: "UsErNaMe", password: "secret", email: "email@com.com"
#=>
Я упустил что-то до боли очевидное?