メモ
- 実装の方針は、ID/PW による認証とほぼ同じ
- フォームで ID/PW を送信する代わりに、Cookie でID/トークン を送信する
- PW 同様、トークンもそのまま DB には入れず、ハッシュ化して保存する
- Active Record が強力すぎて忘れがちだが、Model も単なるクラスなので、
attr_accessor
でインスタンス変数のゲッタ/セッタが定義できる - これで、
password
のようにremember_token
を User インスタンス上で扱えるようにする - ようするに、チュートリアル内で「仮想的な属性」と呼ばれていたものは、単に「DB 上に存在しない」というだけで、ruby 的には紛れもないメンバー変数の1つ
- DB には xxx_digest というカラムはあるが、xxx というカラムはない
- なので、保存したユーザーを検索してきて xxx を調べても、入っているのは nil である
- しかし、DB に xxx_digest を保存するためには、まず xxx がインスタンスに設定されている必要がある
- なので、DB に保存する瞬間だけは、xxx を調べると nil でないものが入っている
cookies.permanent.signed[:user_id]
id = cookies.signed[:user_id]
- current_user メソッドが複雑になって(責任範囲が広がって)つらくなってきた