2010-11-20 9 views
0

У меня есть приложение rails, где мне нужно добавить аутентификацию. Проблема в том, что у меня есть устаревшая база данных с пользовательскими полями пользователя и пароля (t_user и t_pass). Кроме того, t_pass не зашифрован.Аутентификация Rails с настраиваемыми полями

То, что я ищу, похоже на http_basic, но где я могу иметь методы, такие как current_user и, возможно, с лучшим пользовательским интерфейсом. Мне не нужна проверка, сброс пароля, что угодно. Просто способ аутентифицировать мой путь. Я бы использовал restful_authentication, но я на рельсах 3. Я видел вилку, которая работает с рельсами 3, но мне было интересно, есть ли лучший способ справиться с этой ситуацией?

ответ

1

Мне кажется, что вы, вероятно, можете делать то, что вам нужно, используя Devise и немного дополнительной игры. В частности, вы захотите:

  • Убедитесь, что вы создали таблицу пользовательских моделей, используя устаревшую таблицу auth.
  • Переопределение valid_password? на этой модели для проверки на вашем t_pass поле.
  • Переопределить self.find_for_database_authentication, чтобы найти вашу модель на основе поля t_user.

Если вы хотите поддерживать регистрацию, вам, вероятно, также потребуется написать новую стратегию шифрования.

Просто слово предупреждения: хранение паролей в текстовом формате очень плохая практика. Если у вас вообще есть какой-либо выбор, я бы серьезно подумал о переносе существующих пользователей в стандартную структуру Devise с зашифрованными паролями.

+0

Я знаю, что пароль для хранения действительно плохая идея, к сожалению, у меня не было выбора в этой ситуации. К счастью, это просто внутреннее приложение afaik. –

0

Если вы ищете альтернативные камни для использования, вы можете попробовать Devise. Вы можете расширить/изменить настройки по умолчанию, чтобы достичь желаемого.

0

Разработка и аутлогистика - это два возможных варианта. Не могу прокомментировать Devise. Боюсь, поскольку я никогда не использовал его. Кажется, очень популярны в данный момент.

Следующая бы вы начали с Authlogic:

class User < ActiveRecord::Base 
    acts_as_authentic do |config| 
    config.login_field = :t_user 
    config.crypted_password_field = :t_pass 
    config.crypto_provider = YourCryptoProvider 
    end 
    ... 
end 

Там в railscast по основам получения authlogic собирается.

Трудная часть этого заключается в том, что вам нужно будет создать свой собственный класс провайдера криптографии, как описано http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/CryptoProviders, поскольку authlogic не предоставляет метод проверки пароля в текстовом формате.

Как обсуждалось выше, изучите возможность переноса ваших паролей в зашифрованные версии, если это вариант для вас, это не позволит вам бороться с инфраструктурой auth так сильно.

Смежные вопросы