簡単に言うと?
安全性の高いパスワード機能を簡単に実装できるメソッド。
間違ったパスワードを入力させないように、二回パスワードを入力させるフォーム画面を作成するときに使える。
何ができる?
has_secure_passwordを使うと以下の機能が使える様になる。
- ハッシュ化したパスワードをデータベース内のpassword_digestという属性に保存できるようになる。
- 2つのペアの仮想的な属性(passwordとpassword_confirmation)が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される 。
- 認証のために使うauthenticateメソッドが使えるようになる。authenticateメソッドとは、引数で受けとった文字列がオブジェクト内のpassword_digestと一致するか調べるためのメソッド。一致した時はそのオブジェクト自身を返し、不一致だとfalseを返す。
どうやって使う?
- テーブルのカラムに
password_digest
を導入する - Gemfileの
bcrypt
をコメントアウトしてbundle install
(Genfile内にコメントとして既に記述されているのでコメントアウトする) - モデルに
has_secure_password
を追加する -
password
とpassword_confirmation
を使ってフォーム画面を作成する。
$ bin/rails g model user name:string password_digest:string
app/model/user.rb
class User < ApplicationRecord
has_secure_password
end
gem 'bcrypt', '~> 3.1.7'
$ bundle install
app/views/users/form.html.slim
= form_with model: user, local: true do |f|
.form-group
= f.label name, '名前'
= f.text_field :name, class: 'form-control'
.form-group
= f.label :password, 'パスワード'
= f.password_field :password, class: 'form-control'
.form-gorup
= f.label :password_cocfirmation, 'パスワード(確認)'
= f.password_field :password_cocfirmation, class: 'form-control'
= f.submit '登録する', class: 'btn btn-primary'
引用
has_secure_passwordのvalidationsをカスタマイズする
Railsのhas_secure_passwordとは
BCryptのすすめ