Heroku:restful_authentication登录现在区分大小写?我怎么能改变呢?

时间:2010-12-15 17:32:59

标签: ruby-on-rails postgresql heroku restful-authentication

我最近将一个Rails应用程序从Slicehost移到了Heroku。

该应用使用restful_authentication。

现在,在Heroku上,用户名在登录时区分大小写。

所以说某人的用户名为“JoeSchmoe”。在Slicehost(使用MySQL)上,他们可以使用“joeschmoe”或“Joeschmoe”登录,但是在Heroku(使用PostgreSQL)上,除非他们输入正确大小写的用户名,否则会收到错误消息,说明找不到用户名。 / p>

我有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,Postgres比较区分大小写,因此您需要更新生成的User.authenticate方法以符合该方法 - 而不确切知道您正在使用的restful_auth版本(或您安装它的选项)有),很难提供确切的代码,但你会希望比较看起来像这样:

def self.authenticate(login, password)
  return nil if login.blank? || password.blank?
  u = find :first, :conditions => ['lower(login) = ? AND activated_at IS NOT NULL', login.downcase] # need to get the salt
  u && u.authenticated?(password) ? u : nil
end

这也适用于MySQL,lower()lcase()的同义词,至少在5 +