2010-12-15 103 views
0

J'ai récemment déplacé une application Rails de Slicehost à Heroku.Heroku: les connexions restful_authentication sont désormais sensibles à la casse? Comment puis-je changer cela?

L'application utilise restful_authentication. Maintenant, sur Heroku, les noms d'utilisateur sont sensibles à la casse lors de la connexion.

Dites donc que quelqu'un a un nom d'utilisateur de "JoeSchmoe". Sur Slicehost (en utilisant MySQL) ils peuvent se connecter avec "joeschmoe" ou "Joeschmoe" mais sur Heroku (qui utilise PostgreSQL) à moins qu'ils tapent leur nom d'utilisateur avec la bonne majuscule, ils reçoivent une erreur disant que le nom d'utilisateur est introuvable.

Des idées comment je peux résoudre ce problème?

Répondre

1

Les comparaisons Postgres sont sensibles à la casse par défaut, vous devrez donc mettre à jour votre méthode User.authenticate pour s'y conformer - sans connaître exactement la version de restful_auth que vous utilisez (ou les options avec lesquelles vous l'avez installé), il est difficile de fournir le code exact, mais vous voulez que la comparaison ressembler à quelque chose comme ceci:

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 

cela devrait fonctionner dans MySQL, et - lower() est synonyme de lcase(), au moins dans 5+