サマリ
- ユーザーモデルの作成とユーザー登録機能の追加
- パスワードのハッシュ化保存
- パスワードの認証
ポイント
-
Active Recordを使うことで、RailsからDBの詳細を隠蔽し、切り離すことができる。
-
SQLについて学ばずにDBに対してCRUD操作を行える。
-
以下コマンドでモデルを生成し、DBに反映できる
rails generate model User name:string email:string
rails db:migrate
-
rails generate migration
で指定するマイグレーション名の最後に_to_users
を付与しておくと、usersテーブルへのカラム追加だと判断してファイルを作成してくれる。rails generate migration add_password_digest_to_users password_digest:string
-
テストクラスのsetupメソッド内に書かれた処理は、各テストが走る直前に実行される
-
モデルのvalidateの文法
validates :name, presence: true, length: { maximum: 50 }
-
modelの検証でエラーになった内容は
user.errors.full_messages
で確認できる -
%w[]で文字列の配列を作れる e.g.
%w[foo bar baz] => ["foo", "bar", "baz"]
-
callbackメソッド => ある特定の時点で呼び出されるメソッド
- e.g.
before_save { self.email = email.downcase }
- e.g.
-
ハッシュ化した後の値のことをダイジェストという。本章ではパスワードのダイジェストをDBに保存する。
-
パスワードを平文ではなくダイジェストで持っておくとDBからデータが流出したとしても、パスワードに復元できないので乗っ取られることがない。
-
Rails標準の
has_secure_password
を使ってパスワードのハッシュ化保存を実装できる -
has_secure_password
を使用するには以下2点を満たす必要がある- モデルに
password_digest:string
を追加する必要がある - 'bcrypt'gemが必要なので、Gemfileに追記してbundle installしておく
- モデルに
-
has_secure_password
を追加すると、authenticate
メソッドが使えるようになる -
多重代入 (Multiple Assignment)
- 次のような文法で2箇所に同時に同じ値を代入できる
@user.password = @user.password_confirmation = "a" * 5
- 次のような文法で2箇所に同時に同じ値を代入できる