Rails 3 / Devise: соль пароля больше не создается? - PullRequest
25 голосов
/ 09 апреля 2011

Я работаю над проектом, который использует Devise для аутентификации пользователей. Каждый раз, когда пользователь был создан, он генерировал бы соль пароля для него вместе с его зашифрованным паролем.

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

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

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

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

Или ... вообще нужно ли вообще иметь соли? Я думаю, что безопаснее их иметь.

Моя конфигурация пользователей / устройства ниже.

конфиг / Инициализаторы / devise.rb

Devise.setup do |config|

  config.mailer_sender = "mail@domain.com"

  require 'devise/orm/active_record'

  config.authentication_keys = [ :login ]

  config.stretches = 10

  config.encryptor = :bcrypt

  # Setup a pepper to generate the encrypted password.
  config.pepper = "79c2bf3b[...]"

end

приложение / модели / user.rb

  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable

UPDATE

Мне удалось найти уведомление после обновления Devise, которое гласит ...

[DEVISE] From version 1.2, there is no need to set your encryptor to bcrypt since encryptors are only enabled if you include :encryptable in your models. To update your app, please:

1) Remove config.encryptor from your initializer;
2) Add t.encryptable to your old migrations;
3) [Optional] Remove password_salt in a new recent migration. Bcrypt does not require it anymore.

Похоже, что password_salt устарела, если вы используете bcrypt, что объясняет, почему он больше не создается. Так что это отвечает, но другая часть моего вопроса все еще остается ... это достаточно хорошая практика, или я должен пойти с другим шифрованием, кроме bcrypt?

Ответы [ 2 ]

32 голосов
/ 19 июня 2012

В новой версии devise используются символы от 0 до 29 поля зашифрованного пароля в качестве соли и оставшиеся символы в этом поле базы данных для зашифрованного пароля.Таким образом, ваши пароли на самом деле все еще засолены с помощью BCrypt.

15 голосов
/ 10 апреля 2011

За José Valim:

Devise 1.2.1 больше не требует столбца password_salt, если вы используете bcrypt.Если вам нужна какая-то соль, я считаю, что существует метод с именем authentication_salt, который вы можете использовать для получения таких значений. (Источник)

...