Так же, как и большинство веб-сайтов, я должен был хранить "UsErNaMe" в базе данных, но позволить пользователям войти в систему с "именем пользователя".
Это довольно очевидная и необходимая функция, и многие люди, похоже, ее просили, но решение, которое я продолжаю спотыкаться, кажется, отключено от собственной документации Devise.
Например, рассмотрите это сообщение в блоге: http://anti-pattern.com/2011/5/16/case-insensitive-keys-with-devise
[...] Вероятно, вы столкнулись с проблемой, которую некоторые пользователи любят печатать определенные буквы в их логинах (адрес электронной почты и/или имя пользователя) в верхнем регистре, но ожидайте, что он будет нечувствителен к регистру, когда они попытаются войти. необоснованный запрос [...]
Круто! Это то, что я хочу.
Его решение:
# 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 protected]"
#=> <User username="username"...>
Я пропустил что-то больно очевидное?