我最近将一个Rails应用程序从Slicehost移到了Heroku。
该应用使用restful_authentication。
现在,在Heroku上,用户名在登录时区分大小写。
所以说某人的用户名为“JoeSchmoe”。在Slicehost(使用MySQL)上,他们可以使用“joeschmoe”或“Joeschmoe”登录,但是在Heroku(使用PostgreSQL)上,除非他们输入正确大小写的用户名,否则会收到错误消息,说明找不到用户名。 / p>
我有什么想法可以解决这个问题吗?
答案 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 +