In der gleichen Weise wie die meisten Websites arbeiten, sollte ich "UsErNaMe" in der Datenbank speichern, aber Benutzer mit "Benutzername" anmelden.Devise: Erlaube Benutzern, sich als "UsErNaMe" zu registrieren, aber mit "Benutzername"
Dies ist ein ziemlich offensichtliches und notwendiges Feature, und viele Leute scheinen es gefragt zu haben, aber die Lösung, auf die ich stolpere, scheint von Devise's eigener Dokumentation getrennt zu sein.
Betrachten wir zum Beispiel dieses Blog-Post: http://anti-pattern.com/2011/5/16/case-insensitive-keys-with-devise
[...] Sie haben wahrscheinlich in das Problem führen, dass einige Nutzer gerne bestimmte Buchstaben in ihren Anmeldungen eingeben (E-Mail und/oder Benutzername in Großbuchstaben), aber erwarten, dass es Groß- und Kleinschreibung sein, wenn sie in. A nicht Ansinnen [...]
Kühle zu unterzeichnen versuchen! Das ist, was ich will.
Seine Lösung:
# config/initializers/devise.rb
Devise.setup do |config|
config.case_insensitive_keys = [:email, :username]
end
Das ist die Lösung, die ich Befund halten. Aber hier ist die Dokumentation für diese Konfigurationsoption:
# 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 ]
Insbesondere gilt Folgendes: „Diese Schlüssel werden downcased bei der Erstellung/eines Benutzers zu ändern.“ Mit anderen Worten, der Benutzername wird in der Datenbank heruntergestuft.
Um zu überprüfen:
User.create username: "UsErNaMe", password: "secret", email: "[email protected]"
#=> <User username="username"...>
Bin ich etwas schmerzhaft offensichtlich fehlt?
Dies funktioniert natürlich nur, wenn Sie im Benutzermodell ein virtuelles Attribut "login" deklariert haben, legen Sie dies als Ihr Gerät fest: authentication_keys => [: login] und verwenden Sie dieses Attribut in Ihrem Anmeldeformular. –
Auch wenn Sie die Groß- und Kleinschreibung in der Datenbank zulassen, sollten Sie sicherstellen, dass die Eindeutigkeit nicht zwischen Groß- und Kleinschreibung unterscheidet. Andernfalls erlauben Sie sowohl "Benutzername" als auch "Benutzername". Fügen Sie also validates_uniqueness_of hinzu: username,: case_sensitive => false –
Works. Auch, guter Vorschlag, viktor. – danneu