在Devise中,不区分大小写的名称,同时保留大小写

Geo*_*e C 4 ruby-on-rails devise ruby-on-rails-3

使用名称作为键,我们如何在注册时通过忽略大小写来验证名称,同时在显示时仍然记住案例?

config/initializers/devise.rb,config.case_insensitive_keys = [ :name ]注册之前,设置似乎小写整个名称.

例如:一些家伙自称为TheFourthMusketeer.

  • 观点将显示TheFourthMusketeer,而不是第四个观察者
  • 没有新用户可以在tHEfourthMUSKETEER下注册

Dyl*_*kow 6

您可能尝试的是设置:name为不区分大小写,这将在数据库中正确保存区分大小写的名称:

config.case_insensitive_keys = []
Run Code Online (Sandbox Code Playgroud)

然后,覆盖find_first_by_auth_conditionsUser上的类方法,以按名称查找用户.请注意,此代码会因数据库而异(以下是使用Postgres):

def self.find_first_by_auth_conditions(warden_conditions)
  conditions = warden_conditions.dup
  if login = conditions.delete(:login)
    where(conditions).where("lower(name) = ?", login.downcase).first
  else
    where(conditions).first
  end
end
Run Code Online (Sandbox Code Playgroud)

这样做,User.find_for_authentication(login: 'thefourthmusketeer')将使用name"TheFourthMusketeer" 正确地返回记录.

有关覆盖此方法的说明,请参阅https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address.