Railsチュートリアル 第9章 メモ書き
○発展的なログイン(Remember me)
任意でユーザーのログイン情報を記録しておき、ブラウザ再起動後にすぐ
ログインできる機能。
→永続cookieを使う
・トークン:
コンピュータが作成・管理する秘密情報。パスワードはユーザーが作成・管理する。
セッションの永続化には記憶トークンが使われる。
・セッション永続化の流れ:
1)記憶トークンにランダムな文字列を生成。
2)cookiesに有効期限付のトークンを保存。
3)トークンをハッシュ化してデータベースに保存(remember_digestカラム)。
4)ブラウザのcookiesに保存するユーザーIDも暗号化。
5)IDを受け取ったらデータベースを検索し、記憶トークンのcookiesが
データベース内のハッシュ値と一致することを確認する。
・トークンに使う文字列:
SecureRandom.urlsafe_base64はA–Z、a–z、0–9、"-"、"_"のいずれか
の文字(64種類)からなる長さ22のランダムな文字列を返す。
・ユーザーの暗号化済みIDと記憶トークンをブラウザの永続cookiesに保存して、永続セッション(20年間)を作成。
cookies[:remember_token] = { value: remember_token,
expires: 20.years.from_now.utc }
=> cookies.permanent[:remember_token] = remember_token
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
→paramハッシュの値が1であればremember (user)を実行、1でなければforget(user)を実行(if-then)