我正在使用带有登录凭据的Devise:电子邮件/密码 - 没有用户名
我刚注意到登录过程对电子邮件区分大小写。因此,如果您注册bob@apPle.com,然后尝试使用Bob@apple.com登录,则会收到错误消息。非常混乱。
如何使用他们的电子邮件/密码制作设计日志,并且电子邮件不区分大小写?
答案 0 :(得分:64)
您可以轻松解决以下问题。
# config/initializers/devise.rb
Devise.setup do |config|
config.case_insensitive_keys = [:email, :username]
end
答案 1 :(得分:10)
一个选项是覆盖devise使用的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
答案 2 :(得分:5)
我将此添加到我的用户模型中以将其区分大小写,但在登录时使其不区分大小写:
def self.find_for_database_authentication(conditions = {})
self.where("LOWER(email) = LOWER(?)", conditions[:email]).first || super
end
适用于Heroku。
顺便说一句,这只是一个临时修复,因为问题已经解决,这将是Devise 1.2的默认行为。有关详细信息,请参阅this pull request。
答案 3 :(得分:0)
我还有一些解决方案,使用电子邮件工作对所有Devise控制器(功能)都不区分大小写:
class ApplicationController < ActionController::Base
...
...
prepend_before_filter :email_to_downcase, :only => [:create, :update]
...
...
private
...
...
def email_to_downcase
if params[:user] && params[:user][:email]
params[:user][:email] = params[:user][:email].downcase
end
end
...
...
end
我知道这不是最好的解决方案:它涉及另一个模型的另一个控制器并执行对他们来说不必要的代码。但它只是临时搭建而且有效(至少对我而言)。)。
凯文和安德烈斯,谢谢你的回答。这是非常好的解决方案和有用的。我想投票给他们,但我还没有足够的声誉。所以,我只是告诉你'谢谢'。 ;)让我们等待Devise 1.2
答案 4 :(得分:0)