rails 技術ブログ

rails 技術ブログ

勉強したことをアウトプットしていきます

【rails】has_secure_password

has_secure_passwordとは

railsに標準でついている機能で、パスワードをそのままデータベースに保存するのではなく、元に戻すことのできない値にハッシュ化して保存してくれます。
使いたいモデル内にhas_secure_passwordと記述するだけで簡単に使うことができますが、

・使用するモデルのカラムにpassword_digestというカラムがある
bcryptというgem(ハッシュ関数を提供するgem)が必要


という二つの条件があります。

使い方

①bcryptをGemfileに記述し、

bcrypt

インストールする

$ bundle install


②モデルを作成する

$ rails g model user name:string email:string  password_digest:string
# ここで必ず`password_digest`カラムを作成すること

③データベースにusersテーブルを追加する

$ rails db:migrate
# 必要があれば、`rails db:migrate`の前にマイグレーションファイルにNOT NULL制約等を追加する

④userモデル内にhas_secure_passwordを記述する

class User < ApplicationRecord
  has_secure_password
end


補足

has_secure_passwordを記述すると、データベースのカラムには対応しないpasswordpassword_confirmationという2つの属性が追加されます。

password属性
→ユーザーが入力したパスワードを一時的に格納しておく場所

password_confirmation属性
→パスワード確認用にもう一度入力してもらった値を格納する場所


この二つの値が一致していないときは検証に失敗し、間違ったパスワードで登録してしまうことを防ぐことができます。


■参考にした記事

現場で使える Ruby on Rails 5速習実践ガイド | 大場寧子, 松本拓也, 櫻井達生, 小田井優, 大塚隆弘, 依光奏江, 銭神裕宜, 小芝美由紀 |本 | 通販 | Amazon