Правильная практика использования Bcrypt

В этом руководстве показано, как использовать Bcrypt с Rails, но оно значительно отличается в реализации из этой документации по Rails на Bcrypt.


Версия руководства

Установка пароля

def password=(password)
  self.password_digest = BCrypt::Password.create(password)
end

Подтвердить пароль

def is_password?(password)
  BCrypt::Password.new(self.password_digest) == password
end

Но документация делает то же самое, используя встроенные методы.


Версия документации

Установка пароля

Установив user.password или задав оба значения user.password и user.password_confirmation, затем вызов user.save вызовет некоторые обратные вызовы из Bcrypt, которые примут значения пароля, сгенерируют дайджест и сохранят его в базе данных.

user.password = 'mUc3m00RsqyRe' 
user.password_confirmation = 'mUc3m00RsqyRe' 
user.save 

Подтвердить пароль

Метод user.authenticate(password) вернет false или переменную экземпляра user в зависимости от того, соответствует ли аргумент пароля user.password_digest.

user.authenticate('notright')
user.authenticate('mUc3m00RsqyRe')

Вопросы

  • Я всегда использовал версию с документацией, так как увидел ее первой, но придерживается ли руководство какой-то лучшей практики?

  • Почему руководство переписывает колесо? Это кажется очень не-Railsy.

  • Это просто разница в версиях Bcrypt или Rails?


person Matt C    schedule 30.04.2016    source источник


Ответы (1)


Правильный способ — использовать has_secure_password (задокументированный метод), который был доступен начиная с Rails 3. Может быть, руководство было основано на практике до Rails 3?

person Community    schedule 30.04.2016