日々精進

新しく学んだことを書き留めていきます

Rails - パスワード

会員制サイトを作成する場合、パスワードをどこかに記録する必要があるが
DBにパスワードを保存するのではなく、パスワード+ソルト値のハッシュ値を保存する。
これはクラッカーにDBに侵入されたときにパスワードを知られないようにするため。
今作っているサイトではパスワードと秘密の質問の答えのハッシュ値を保存しているが、
ハッシュを生成する処理をミスって少しはまった。
具体的には
1.ユーザがパスワードと秘密の質問の答えを入力
2.ソルト値生成
3.パスワード+ソルトからパスワードのハッシュ値を計算する
4.ソルト値生成
5.秘密の質問の答え+ソルトから秘密の質問の答えのハッシュ値を計算する
6.秘密の質問の答え、パスワード、ソルト値をDBに保存
としたが、
・ソルト値は一つしかDBに登録できない
・生成するたびに値が変わる
ので、ログインできなくなってしまった。4番の処理を飛ばせばOK。
2時間ぐらいはまったかな。。今後の対策は以下。
・一つの機能を実行する毎にコミット
・可能な限り小さい単位の変更毎にテストを行う