ダイジェスト digest 割と大事

本当に簡単に説明してくれてるんだろうけど、このサイトの説明がわかり易かった

https://techacademy.jp/magazine/21231

 

要はハッシュや16進数として暗号化して出力ためのメソッドで、暗号化されたものから元の内容は推測出来ないようになってるってのがdigestメソッドって感じで良いんかな、と思った。確かにランダムに作成したトークンをダイジェストで暗号化してDBに保存したら安全だなぁとも思った。一致だけすればトークンは十分役割を果たせるワケだし

 

使いたかったらrequire "digest"する

railsの場合はモデルにhas_secure_passwordとすることで以下のことができるようになる

チュートリアル抜粋

  • セキュアにハッシュ化したパスワードを、データベース内のpassword_digestという属性に保存できるようになる。
  • 2つのペアの仮想的な属性 (passwordpassword_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って感じ