最近在用 devise
其中在配置多个标识的时候有个大小写敏感与否的问题,如下:
Be sure to add case insensitivity to your validations on :username:
# app/models/user.rb
validates :username,
:presence => true,
:uniqueness => {
:case_sensitive => false
} # etc.
Alternatively, change the find conditions like so:
# when allowing distinct User records with, e.g., "username" and "UserName"...
where(conditions).where(["username = :value OR lower(email) = lower(:value)", { :value => login }]).first
描述的事情是大小写不敏感就把 case_sensitive 设置为 false,对吧,但是下面的 sql 却是对username
大小写敏感的啊
看了 RubyChina 的源码,设置的是{ case_sensitive: true }
,也就是大小写敏感,但是实际上 RubyChina 的登录对大小写是不敏感的
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
login = conditions.delete(:login)
login.downcase!
where(conditions.to_h).where(['lower(login) = :value OR lower(email) = :value', { value: login }]).first
end
这该如何解释啊,是我脑子一直转不过来弯么,望各位能够指点迷津。。