mysqlにユーザ名とパスワードを保存するハンドラを作成しました。私がやるとしたら、抽象レベルではbcryptを使用してmysqlにパスワードをハッシュして保存した後のユーザのログインに関するベストプラクティス
bcrypt.compare(myPlaintextPassword, hash, function(err, res) {
// res == true
});
:
bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) {
// Store hash in your password DB.
});
bcryptのもそうのようなハッシュで平文を比較するために、標準的なコードを提供しています。ハンドラ関数は、標準のbcryptのパスワードハッシュを行い、
- ユーザー入力のユーザー名とプレーンテキストのパスワード
- をqを送る取得:私は次の操作を実行する必要があります比較関数上記=「somenameの」
- ユーザ名が
- がハッシュされたパスワードを比較して、ユーザー認証バックいくつかのユーザ名を取得し、パスワードをハッシュ化されたWHEREデータベースへueryでは、ユーザーがSELECT * FROM
それに伴う問題は、すべてのユーザー固有のデータをすることができないということです認証の前に取得されるので、余分なユーザーの機密データを取得するために追加のクエリをチェーンする必要があり、このプロセスはjankyと思われます。パスワードを取り戻す必要がないはずのときにクライアントがハッシュされたパスワードを持っているため、安全ではないようです。
私はしたいと思います:
- いくつかのユーザ名と任意のユーザー固有のデータ
- を取り戻すデータベースに
SELECT * FROM users WHERE username = 'SomeName' AND password = COMPARISON_FUNCTION_THAT_WORKS_WITH_BCRYPT('plaintext')
- をユーザ入力のユーザー名とプレーンテキストのパスワード
送信クエリを取得私は完了しました
パスワードの暗号化/ユーザーログインプロセスでこのソフトウェアを360kダウンローダーとしているので、私はここでボートを完全に紛失していますか?
'この時点でクライアントはハッシュされたパスワードを持っているため、この時点でクライアントがハッシュパスワードを持っている理由を理解できません。コードを再考してください –
それでは、なぜbcryptは一見有益なパスワードハッシュツールを提供していますか? – J0NNYZER0
あなたの質問にはコードが不足しているので、私は混乱しなければなりません。node.jsタグを見るので、node.jsをサーバ側に集めてmysqlに接続し、bcryptがハッシングしている場所ですパスワードは - 私はこれまでのところですか?だから "クライアント"は何ですか?それはウェブブラウザですか?あなたはクライアント側でbcryptを使用していますか? –