接受的答案不完整,因为它在注册时仍然区分大小写。例如,“用户名”和“用户名”都可以成功注册,但只有第一个可以登录。
禁用不区分大小写的键config/initializers/devise.rb
(这也可以是特定于模型的,所以也检查那里):
config.case_insensitive_keys = []
覆盖find_first_by_auth_conditions
方法models/user.rb
:
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:username)
where(conditions).where(["lower(username) = :value", { :value => login.downcase }]).first
else
where(conditions).first
end
end
...并且还设置validates_uniqueness_of
在models/user.rb
:
validates_uniqueness_of :username, :case_sensitive => false
所以你有它:不区分大小写的身份验证,不区分大小写的注册,在数据库中保留大小写。