0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsチュートリアル9章まとめ

Last updated at Posted at 2021-03-17

#はじめに
Railsチュートリアル9章を勉強していて、自分の中に落とし込むためにまとめてみることにしました。

#前提知識
HTTP通信は基本ステートレスな通信
ステートレスとは・・・ページ遷移の際など前の情報を引き継がない

しかし、ショッピングサイトのカートの中身など引き継いでいきたい場合もある。
その場合、ステートフルにしないと困る。
ここで用いられるのがsession管理。

session:接続中のユーザーの行動履歴
cookie:自分が誰なのかを証明するもの

#9.1.1 記号トークンと暗号化
・Remember me機能とは
ブラウザを閉じた後でもユーザーのログイン状態を保持するもの
例.Twitter

記憶トークン(remember token)を生成し、cookiesメソッドによる永続的cookiesの作成や、安全性の高い記憶ダイジェスト(remember digest)によるトークン認証にこの記憶トークンを活用する。
cookieには、セキュリティの観点からパスワード等をそのまま保存するのではなく、トークンを利用する。


class AddRememberDigestToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :remember_digest, :string
  end
end

記憶ダイジェスト用にマイグレーションを作成する。これでdbにremember_digestカラムが追加される。
記憶ダイジェストとは、記憶トークンをそのままDBに保存するのではセキュリティ的に問題があるので、ダイジェストに変換したもの


  def User.new_token
    SecureRandom.urlsafe_base64
  end
end

新しいトークンを作成するため、User.new_tokenメソッドを定義
この際、urlsafe_base64メソッドを使う。(ランダムな文字列がほしいだけ)

class User < ApplicationRecord
  attr_accessor :remember_token
  .
  .
  .
  def remember
    self.remember_token = ...
    update_attribute(:remember_digest, ...)
  end
end

仮想のremember_token属性を作成。
rememberメソッドの一行目では、ローカル変数と区別するために、self.remember_tokenと記述。

  # 永続セッションのためにユーザーをデータベースに記憶する
  def remember
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end
end

rememberメソッドを使って、ユーザーに記憶ダイジェスト(remember_digest)を追加!
ここでは、remember_tokenをUser.digestで変換し登録している。

#9.1.2 ログイン状態の保持
9.1.1でUser.rememberメソッドを定義し動作できるようになったため、ユーザーの暗号化済みIDと記憶トークンをブラウザの永続cookiesに保存して、永続セッションを作成する準備ができた。
 
これを実際に行なっていくためにcookiesメソッドを使用。
cookiesは、1つのvalue(値)とexpires(有効期限)からなる。このexpiresを20年にすることで実質永続的なセッションを作ることが可能。

cookiesの設定

参照リファレンス:https://docs.ruby-lang.org/ja/latest/class/CGI=3a=3aCookie.html

cookies[:remember_token] = { value:   remember_token,
                             expires: 20.years.from_now.utc }
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?