Skip to content

middleware.ts 導入によるセッションリフレッシュの実装 #47

@k0kishima

Description

@k0kishima

概要

Next.js ミドルウェアを導入し、Supabase Auth のセッション(JWT)をリクエスト時に自動リフレッシュする仕組みを実装する。

背景

  • 現在 middleware.ts は存在しない(ランディングページ / のルーティング要件のため意図的に不使用)
  • src/lib/supabase/proxy.tsupdateSession() が定義済みだが未使用
  • メール+パスワード認証の導入にあたり、Supabase 公式のベストプラクティスに従いミドルウェアでのセッションリフレッシュを導入する
  • JWT の有効期限(1時間)が切れた場合、ページアクセス時にリダイレクトが発生する問題を解消

スコープ

1. middleware.ts の作成

  • src/middleware.ts の新規作成
  • 既存の updateSession() (proxy.ts) を活用
  • supabase.auth.getUser() によるセッション検証とCookieリフレッシュ

2. matcher 設定

  • ランディングページ (/) のルーティング要件との両立が必要
  • src/lib/locale.ts L14-27 のコメントにある制約事項を考慮
  • 以下を除外:
    • 静的ファイル (_next/static, _next/image, favicon.ico 等)
    • API ルート(必要に応じて)
    • ランディングページ関連のルート(影響を与えない構成)

3. 既存の proxy.ts との整合

  • updateSession の実装が middleware から正しく呼び出せることを確認
  • 必要に応じて proxy.ts の調整

注意事項

  • ランディングページ要件: src/lib/locale.ts のコメントで言及されている、/(landing)/page.tsx をルート / に配置する要件を壊さないこと
  • パフォーマンス: ミドルウェアは全リクエストで実行されるため、不要なルートでは早期リターンする
  • Supabase 公式推奨: Supabase Auth with Next.js のミドルウェア設定を参考にする

受け入れ条件

  • ミドルウェアが正しくセッションリフレッシュを行う
  • ランディングページ (/) のルーティングが壊れない
  • 認証済みユーザーのセッションが自動更新される(JWT期限切れでのリダイレクトが発生しない)
  • 静的ファイルやAPIルートでは不要な処理が実行されない

依存関係: #45 の完了が前提

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions