Open3

cookieの流れをおさらい

mitsuyoshimitsuyoshi

ログインボタンを押下

  • ログインボタンを押下。formDataを取得。その内容をJOSEのSignJWTを使用してencrypt(暗号化)
  • 帰ってきたトークンをcookies.set('session', 暗号化トークン )関数でクッキーに保存。
  • cookies.get('session').valueで内容を取得して、JOSEのjwtVerifyでdecrypt(複合化)して、ブラウザに表示できる。

ログアウトボタンを押下

  • cookies.set('session' , ' ')で強制的に破棄。

ページが読み込まれるたびmiddleware.ts内の関数が呼ばれる。

  • cookies.get('session')で取得し、無ければページをそのまま返す。
  • あればそれをdecrype(複合化)して、新たに有効期限を設定する。
mitsuyoshimitsuyoshi

cookies()関数

  • next/headersからimportされる関数。
  • 引数にはcookies( key, value, options)を指定する。

optionsの種類

  • path(文字列): クッキーが有効なパスを指定します。デフォルトは ' / ' となる
  • expires(日付オブジェクト): クッキーの有効期限を指定します。この日付を過ぎるとクライアント側でクッキーが削除されます。
  • maxAge(数値): クッキーの有効期限を秒単位で指定します。expiresよりも優先されます。
  • domain(文字列): クッキーの有効なドメインを指定します。
  • secure(真偽値): クッキーの送信をセキュアにするかどうかを指定します(https通信でのみ送信されます)。
  • httpOnly(真偽値): クライアント側のJavaScriptからクッキーにアクセスできるかどうかを指定します。trueに設定すると、JavaScriptからはアクセスできません。
  • sameSite(文字列): クロスサイトリクエストによるCSRF攻撃を防ぐためのSameSite属性を指定します。"Strict"、"Lax"、"None"のいずれかを指定します。
mitsuyoshimitsuyoshi

State less Session

  • ユーザーのセッション情報を、ブラウザ側にのみ保存することをステートレスセッションという。
  • これによりサーバーのストレージを消費しなくて済む。