0

このガイドでは、Rails で Bcrypt を使用する方法を示しますが、 Bcrypt に関するこの Rails ドキュメントとは実装が大きく異なります。


ガイド版

パスワードを設定してください

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または設定してから呼び出すと、パスワード値を取得してダイジェストを生成し、データベースに保存する Bcrypt からいくつかのコールバックが呼び出されます。user.passworduser.password_confirmationuser.save

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

パスワード認証

このメソッドは、パスワード引数が一致するかどうかuser.authenticate(password)に応じて、 false または のインスタンス変数を返します。useruser.password_digest

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

質問

  • 最初に見たときからずっとドキュメント版を使用していましたが、このガイドはより適切な方法に従っていますか?

  • ガイドがホイールを書き直すのはなぜですか? それは非常にRailsyではないようです。

  • これは Bcrypt または Rails のバージョンの違いだけですか?

4

1 に答える 1

1

正しい方法はhas_secure_password、Rails 3 以降で利用可能だった (文書化された方法) を使用することです。このガイドは、Rails 3 以前のプラクティスに基づいていたのでしょうか?

于 2016-04-30T06:35:01.653 に答える