コード:bcryptの::エラー:: Railsの中InvalidHashエラー
class LoginController < ApplicationController
def auth
if params[:name].present? && params[:pass].present? && params[:role].present?
@name=params[:name]
pass=params[:pass]
role=params[:role]
epass = BCrypt::Password.new(pass)
else
render "argerror"
end
end
end
エラー:
BCrypt::Errors::InvalidHash (invalid hash):
app/controllers/login_controller.rb:12:in `new'
app/controllers/login_controller.rb:12:in `auth'
パスワードの暗号化メカニズム:
salt = BCrypt::Engine.generate_salt
pass = BCrypt::Engine.hash_secret(pass, salt)
上記のコード製品「bcryptの::エラー:: InvalidHash "エラー。私の要件は、クライアントからユーザー名とパスワードを取得し、 のデータをdbに格納して検証することです。データベースでは、bcryptで暗号化されたユーザーのハッシュされたパスワードを保存しました。だから、今私は クライアントに入力されたパスワードを暗号化しようとしました。現在のパスワードを暗号化した後、dbに格納されているハッシュパスワードと一致します。しかし、それはエラーを生成します。この問題を解決するには?
パスワードの検証方法を説明できますか?なぜなら、dbはパスワードをハッシュしており、プレーンなパスワードを持っているからです。ハッシュされたパスワードを "BCrypt :: Password.new(user.password)"に渡すだけです。私は、提出されたパスワードのハッシュを取得し、そのハッシュを使用する必要があることを期待して、dbに格納されているパスワードを確認してユーザーのログイン認証情報を検証できます。しかし、ここではいくつか異なる。 – mrg
'' BCrypt :: Password.new(user.password) 'は' == 'のパブリックメソッドを持っていますので、' db_hash == "plain_text" 'を呼び出すと、それはあなたが渡すプレーンテキストを暗号化します次に、ハッシュが同じかどうか比較してください。 ここでは、 'BCrypt'の' == 'のソースを見ることができます:http://bcrypt-ruby.rubyforge.org/classes/BCrypt/Password.html#M000009 私はそのことを説明したいと思います。ない。 – Kieran
ここで、 "=="は、文字列比較で使用する演算子と同じではありません。そうですか? – mrg