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?