IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

Ruby の bcrypt gem を使ってみる

 使ってみる

Gemfile の bcrypt 部分を有効化して、ターミナルから bundle を実行して gem をインストールする。

f:id:matt-note:20181229134928p:plain

  • bundle

 

password_digest 属性を持つ User モデルを作成する。

  • bin/rails g model User name:string email:string password_digest:string
  • bin/rails db:migrate

 

User モデルで has_secure_password メソッドを呼び出す。

f:id:matt-note:20181229135412p:plain

 

確かめてみる

attribute_names メソッドで、User モデルの属性を出力してみる。

User モデルは、パスワードについて password_digest だけをデータベースで保存することがわかる。password や password_confirmation は、データベースで保存しない。

f:id:matt-note:20181229140139p:plain

 

User モデルのインスタンスメソッドを調べてみる。

以下のように、User モデルには password と password_confirmation についてゲッターメソッドとセッターメソッドが定義されていることがわかる。

f:id:matt-note:20181229135742p:plain

 

ユーザーから入力された password と password_confirmation の値は上記メソッド等で処理して、値が検証できたら password_digest を生成してデータベースに保存するという流れになる。

f:id:matt-note:20181229142758p:plain

f:id:matt-note:20181229142808p:plain

 

ランダムなハッシュ値は BCrypt のメソッドで生成している。f:id:matt-note:20181229143838p:plain

 

まとめ

Ruby の bcrypt を使う場合、ユーザーからは password と password_confirmation の値を入力してもらって、データベースには password_digest の値を保存する。

 

参考