Devise: Zezwalaj użytkownikom na rejestrację jako „UsErNaMe”, ale zaloguj się za pomocą „username”

W ten sam sposób, w jaki działa większość stron internetowych, miałem przechowywać „UsErNaMe” w bazie danych, ale pozwolić użytkownikom logować się przy użyciu „nazwy użytkownika”.

Jest to dość oczywista i niezbędna cecha i wydaje się, że wiele osób ją o to pytało, ale rozwiązanie, na które wciąż natrafiam, wydaje się nie mieć związku z własną dokumentacją Devise.

Na przykład rozważ ten post na blogu:http://anti-pattern.com/2011/5/16/case-insensitive-keys-with-devise

[...] prawdopodobnie natknąłeś się na problem polegający na tym, że niektórzy użytkownicy lubią wpisywać wielkie litery w swoich loginach (e-mail i / lub nazwa użytkownika) dużymi literami, ale oczekują, że przy próbie zalogowania się nie będzie rozróżniać wielkości liter. nieuzasadnione żądanie [...]

Fajne! To jest to czego chce.

Jego rozwiązanie:

<code># config/initializers/devise.rb
Devise.setup do |config|
  config.case_insensitive_keys = [:email, :username]
end
</code>

To rozwiązanie, które wciąż znajduję. Ale oto dokumentacja tej opcji konfiguracyjnej:

<code># 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 ]
</code>

W szczególności: „Te klawisze zostaną usunięte podczas tworzenia / modyfikowania użytkownika”. Innymi słowy, nazwa użytkownika jest umieszczana w bazie danych.

Do weryfikacji:

<code>User.create username: "UsErNaMe", password: "secret", email: "[email protected]"
#=> <User username="username"...>
</code>

Czy brakuje mi czegoś boleśnie oczywistego?

questionAnswers(1)

yourAnswerToTheQuestion