#はじめに
has_secure_passswordメソッドについてまとめてみた。
#has_secure_passwordとは
has_secure_passwordは、パスワードをハッシュ化(暗号化)してくれるメソッド。
このメソッドを使う為に以下二つを行う必要がある。
・bcrypt
というgemを追加すること。
・データベースにpassword_digest
というカラムを作成すること。
##使い方
以下のように、モデルファイルに定義する。
class User < ApplicationRecord
~
~
~
has_secure_password
end
##使える機能
・2つのペアの仮想的な属性が使えるようになる。(password
とpassword_confirmation
)
・autheticate
メソッドが使えるようになる。
###2つの仮想属性について
・password
属性
データベースに保存される。(仮想属性なので、テーブル上には見えない)
・password_confirmation
属性
データベースに保存されない仮想の属性で、パスワードの入力確認が行われる。
この属性を使用すると、password
属性とpassword_confirmation
属性の双方が一致しているかのバリデーションが自動的に追加されるようになっている。
補足
password_digest
属性には、password
属性に入れた値をハッシュ化した値を入れる。
###autheticateメソッドについて
authenticate
メソッドはパスワードが一致しているかどうかを確認するメソッド。
001:0> user = User.find_by(email: "example.com")
002:0> user.password_digest #パスワードのハッシュ値を確認する。ハッシュ化されていることを確認する。
=> "$2a$10$YmQTuuDNOszvu5yi7auOC.F4G//FGhyQSWCpghqRWQWITUYlG3XVy"
003:0>user.authenticate("not_the_right_password") #間違ったパスワードを入力する
=> false
004:0>user.authenticate("foobar") #正しいパスワードを入力する
=> #<User id: 1, name: "example_user", email: "exampleuser@example.com",
created_at: "2014-07-25 02:58:28", updated_at: "2014-07-25 02:58:28",
password_digest: "$2a$10$YmQTuuDNOszvu5yi7auOC.F4G//FGhyQSWCpghqRWQW...">
005:0>!!user.authenticate("foobar") #頭に「!!」をつけることで論理値を取得する。
=> true