Heroku: логины restful_authentication теперь чувствительны к регистру? Как я могу это изменить? - PullRequest
0 голосов
/ 15 декабря 2010

Я недавно переместил приложение Rails из Slicehost в Heroku.

Приложение использует restful_authentication.

Теперь в Heroku имена пользователей чувствительны к регистру при входе в систему.

Так скажем, у кого-то есть имя пользователя "JoeSchmoe". На Slicehost (используя MySQL) они могут войти с помощью "joeschmoe" или "Joeschmoe", но на Heroku (который использует PostgreSQL), если они не введут свое имя пользователя с правильной прописной буквой, они получат сообщение об ошибке, в котором имя пользователя не может быть найдено. 1007 *

Есть идеи, как мне это исправить?

1 Ответ

1 голос
/ 18 декабря 2010

Сравнения 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 +

...