remember機能の実装にコメントおはようございます。tutorial9章、remember機能の実装についてまとめたいと思います。永続的セッションを実装するための実装は以下のように記述されました。記憶トークンにランダムな文字列を用いるブラウザのcookiesにトークンを保存するときは有効期限を設定するトークンはハッシュ値にしてから保存するブラウザのcookiesに保存するユーザーidは暗号化する永続ユーザーIDを含むcookiesを受け取ったら、そのIDでデータベースを検索し、記憶トークンのcookiesがデータベース内のハッシュ値と一致することを確認する少しわかりにくいですよね笑初めて読んだときはわけ分からなくなりました。これを自分なりに解釈したところ記憶トークンをランダムな文字列を用いて作成し、さらにそれを暗号化した記憶ダイジェストを作るユーザーの暗号化済みIDと記憶トークンを使いcookiesを作成するユーザーがサイトに来た際、暗号化済みのIDと記憶トークンを持ちいて認証を行うといった流れかなと思います。remember機能の実装では、早速説明していこうと思います。remember_digestの追加まず、最初にユーザーに記憶トークンを持たせるためのremember_digestカラムをUserモデルに追加します。db:migrateこの二つのコマンドで実装できました。記憶トークンはランダムな文字列でなければなりません。TutorialではRuby標準ライブラリのSecureRandomモジュールにあるurlsafe_base64メソッドを使います。よって以下のメソッドをUserモデルに追記します。User.remember_tokenSecureRandom.urlsafe_base64endこれによりランダムな文字列が追加されます。User.rememberメソッドで記憶トークンをユーザーと関連付け、記憶ダイジェストをDBに保存するremeber_digest(記憶ダイジェスト)は追加しましたが、記憶トークンはまだ追加されていません。そのため、まずattr_accessorメソッドにremember_token(記憶トークン)を宣言し、アクセスできるようにします。User.new_tokenupdate_attribute(:remember_digest,User.digest(remember_token))endcookiesで永続セッション作成ユーザーの暗号化済みのIDと記憶トークンをcookiesに保存して永続セッションを作成します。これにはcookiesメソッドを使います。cookiesは一つの値と有効期限から出来ています。20.years.from_now.utc}上記のコードはpermanentメソッドを使うとシンプルになります。user.idと記述します。ユーザーIDと記憶トークンはセットで使うのでこちらも永続的でなければなりません。このままだとセキュリティ的に良しとしないのでさらに改良します。user.idsignedメソッドによって暗号化できます。記憶トークンと記憶ダイジェストを使い認証を行うこの認証にはパスワード認証の際にも使ったbcryptを用います。authenticate?(remember_token)BCrypt::Password.new(remember_digest).is_password?(remember_token)end次は実際にユーザーを記憶します。今までのコードは一時セッションを前提に書かれていたのでそれを少し変更します。現時点では一時セッションしか扱ってないので正常には機能しません。永続セッションの場合はsession[:user_id]が存在すれば一時セッションからユーザーを取り出し、それ以外の場合はcookies[:user_id]から取り出し、対応する永続セッションにログインする必要があります。手順は以下の通りです。remember_digestをnilにするメソッドを作成1のメソッドを用いて、cookiesを削除し、ログアウトする1については記憶ダイジェストをnilで更新すればokです。nil)end次に1のメソッドを用いてcookiesを削除し、ログアウトします。認可の実装の要約コメントを残すコメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。WordPress.。