2013-07-15 3 views
0

В основном, как вопрос спрашивает.Должен ли я принимать зашифрованный пароль с помощью AuthLogic?

AuthLogic документация для verify_password_method состояний:

имя метода в вашей модели, используемой для проверки пароля. Это должен быть метод экземпляра. Он также должен быть готов принять сырой пароль и платный пароль.

Я хотел бы поддержать это, поскольку он позволяет мне поддерживать текущее поведение маскировки нашей системы, не сохраняя пароли с открытым текстом, как мы были в прошлом. Однако мне кажется, что простое сравнение строк с crypted_password в базе данных так же плохо, как хранение обычных паролей обычного текста.

Я что-то упустил, или есть какой-то другой способ принять зашифрованный пароль в AuthLogic?

Для справки, это, как я собирался написать valid_password? метод:

def valid_password?(password, check_from_database = nil) 
    if password == self.crypted_password 
    true 
    else 
    super(password, check_from_database) 
    end 
end 
+0

Для чего используется 'valid_password?'? – juanpastas

+0

'valid_password?' - метод по умолчанию, используемый 'verify_password_method', чтобы определить, введен ли пользователь правильный пароль. Базовый метод, вызываемый 'super', можно найти в строке 248 здесь: https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/acts_as_authentic/password.rb Таким образом, реализация по умолчанию принимает открытый текст пароль и сравнивает его с хешированным паролем. –

ответ

0

Ok, получается, что есть гораздо более простой способ сделать это (хотя это кажется ужасно недокументированные, и не сделал обратитесь к поиску Google, как это сделать).

Authlogic::Session::Base.new(@user, true)

Эта линия позволяет создавать сеанса без проверки учетных данных. Очевидно, что вы должны быть осторожны с этим, поскольку он предполагает, что пользователь уже правильно определился - для моего использования, так как есть проверка, чтобы гарантировать, что текущий пользователь является пользователем admin, это безопасно.