私はしばらくの間、ユーザー認証にDeviseを使用するプロジェクトに取り組んできました。ユーザーが作成されるたびに、暗号化されたパスワードとともにユーザーのパスワードソルトが生成されます。
このプロジェクトの最後に来たとき、ユーザー登録をテストしていて、新しい役割がこれらの新しいユーザーのデータベースにパスワードソルトを作成していないのに対し、古いユーザーはすべてソルトを持っていることに気付きました。新しいユーザーは問題なくサインインできますが、Deviseがソルトを作成しなくなった理由が心配です。
私が遭遇したDeviseの唯一の奇妙な点は、モジュールをアップグレードしたときに、bcryptがデフォルトの暗号化になっているため、暗号化可能ファイルの削除に関する何か、またはその効果を示すログを覚えていることです。私がそうしたのは...これが現在の問題と関係があるかどうかはわかりません。
さらに、自分のプロジェクトがうんざりしているのではないかと考えて、まったく新しいRailsアプリケーションを最初から作成し、それにDeviseを追加しました。その新しいプロジェクトでさえ、ユーザーに塩を作成していません。
Deviseにパスワードソルトを設定する新しい方法はありますか、またはソルトが作成されなくなった理由を誰かが知っていますか?残念ながら、Devise wikiにはこの件について多くのことを言うことはなく、Googleはこれまでのところ無駄な検索を行ってきました。
それとも...そもそも塩が必要ですか?それらを持っている方が安全だと思います。
私のusers/deviseの設定は以下の通りです。
config/initializers/devise.rb
Devise.setup do |config|
config.mailer_sender = "[email protected]"
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
app/models/user.rb
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
[〜#〜]更新[〜#〜]
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.
したがって、bcryptを使い続けると、password_saltは非推奨になるようです。これが、password_saltが作成されなくなった理由を説明しています。それで答えますが、私の質問の他の部分はまだ残っています...これは十分な練習ですか、それともbcrypt以外の別の暗号化を使用する必要がありますか?
JoséValimによる:
Bcryptを使用している場合、Devise1.2.1ではpassword_salt列は不要になりました。ある種のソルトが必要な場合は、そのような値を取得するために使用できるauthentication_saltというメソッドがあると思います。 (ソース)
新しいバージョンのdeviseは、暗号化されたパスワードフィールドの0〜29文字をソルトとして使用し、そのデータベースフィールドの残りの文字を暗号化されたパスワードに使用します。したがって、パスワードは実際にはまだBCryptでソルトされています。