Rails - 设计,电子邮件案例不敏感

AnA*_*ice 18 ruby-on-rails devise ruby-on-rails-3

我正在使用带有登录凭据的Devise:电子邮件/密码 - 没有用户名

我刚刚注意到登录过程对电子邮件区分大小写.因此,如果您注册bob@apPle.com,然后尝试使用Bob@apple.com登录,则会收到错误消息.很混乱.

如何使用他们的电子邮件/密码来设计日志,并且电子邮件不区分大小写?

小智 65

您可以轻松解决以下问题.

# config/initializers/devise.rb
Devise.setup do |config|
  config.case_insensitive_keys = [:email, :username]
end
Run Code Online (Sandbox Code Playgroud)

  • 确保运行迁移以对数据库中的任何现有电子邮件或用户名进行下载. (3认同)

Kev*_*tre 10

一种选择是覆盖设计使用的find方法.就像是:

# User.rb
before_save do
  self.email.downcase! if self.email
end

def self.find_for_authentication(conditions) 
  conditions[:email].downcase! 
  super(conditions) 
end 
Run Code Online (Sandbox Code Playgroud)


And*_*jía 5

我将此添加到我的用户模型中以将其区分大小写,但在登录时使其不区分大小写:

def self.find_for_database_authentication(conditions = {})
  self.where("LOWER(email) = LOWER(?)", conditions[:email]).first || super
end
Run Code Online (Sandbox Code Playgroud)

它适用于Heroku.

顺便说一句,这只是一个临时修复,因为问题已经解决,这将是Devise 1.2的默认行为.有关详细信息,请参阅此拉取请