Devise: Разрешить пользователям регистрироваться как «UserName», но входить в систему с «username»

Точно так же, как работает большинство веб-сайтов, я должен был хранить «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"
#=> 

Я упустил что-то до боли очевидное?

10
задан danneu 10 May 2012 в 10:22
поделиться