【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
を記述すると、データベースのカラムには対応しないpassword
とpassword_confirmation
という2つの属性が追加されます。
password
属性
→ユーザーが入力したパスワードを一時的に格納しておく場所
password_confirmation
属性
→パスワード確認用にもう一度入力してもらった値を格納する場所
この二つの値が一致していないときは検証に失敗し、間違ったパスワードで登録してしまうことを防ぐことができます。
■参考にした記事
現場で使える Ruby on Rails 5速習実践ガイド | 大場寧子, 松本拓也, 櫻井達生, 小田井優, 大塚隆弘, 依光奏江, 銭神裕宜, 小芝美由紀 |本 | 通販 | Amazon