ダイジェスト digest 割と大事
本当に簡単に説明してくれてるんだろうけど、このサイトの説明がわかり易かった
https://techacademy.jp/magazine/21231
要はハッシュや16進数として暗号化して出力ためのメソッドで、暗号化されたものから元の内容は推測出来ないようになってるってのがdigestメソッドって感じで良いんかな、と思った。確かにランダムに作成したトークンをダイジェストで暗号化してDBに保存したら安全だなぁとも思った。一致だけすればトークンは十分役割を果たせるワケだし
使いたかったらrequire "digest"する
railsの場合はモデルにhas_secure_passwordとすることで以下のことができるようになる
※チュートリアル抜粋
- セキュアにハッシュ化したパスワードを、データベース内の
password_digest
という属性に保存できるようになる。 - 2つのペアの仮想的な属性 (
password
とpassword_confirmation
) が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される18 。 authenticate
メソッドが使えるようになる (引数の文字列がパスワードと一致するとUserオブジェクトを、間違っているとfalse
を返すメソッド) 。
非常に便利で協力だが、一つだけhas_secure_passwordの機能を使えるようにするためには一つだけ条件がある。それは、
モデル内にpassword_digestという属性が含まれること
なので例えば
rails generate migration add_password_digest_to_users password_digest:string
等とコマンドを打ち込んでdb:migrateする必要がある
長かったがやることは
ユーザーモデルにhas_secure_passwordと記述し
password_digest属性をマイグレーションファイルに足しただけ
後は必要に応じてユーザーモデルに
validates :password, presence: true, length:{minimum:6}
くらいの制約をかけておけばとりあえずOKって感じ