概要
Next.js ミドルウェアを導入し、Supabase Auth のセッション(JWT)をリクエスト時に自動リフレッシュする仕組みを実装する。
背景
- 現在
middleware.ts は存在しない(ランディングページ / のルーティング要件のため意図的に不使用)
src/lib/supabase/proxy.ts に updateSession() が定義済みだが未使用
- メール+パスワード認証の導入にあたり、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 のミドルウェア設定を参考にする
受け入れ条件
依存関係: #45 の完了が前提
概要
Next.js ミドルウェアを導入し、Supabase Auth のセッション(JWT)をリクエスト時に自動リフレッシュする仕組みを実装する。
背景
middleware.tsは存在しない(ランディングページ/のルーティング要件のため意図的に不使用)src/lib/supabase/proxy.tsにupdateSession()が定義済みだが未使用スコープ
1. middleware.ts の作成
src/middleware.tsの新規作成updateSession()(proxy.ts) を活用supabase.auth.getUser()によるセッション検証とCookieリフレッシュ2. matcher 設定
/) のルーティング要件との両立が必要src/lib/locale.tsL14-27 のコメントにある制約事項を考慮_next/static,_next/image,favicon.ico等)3. 既存の proxy.ts との整合
updateSessionの実装が middleware から正しく呼び出せることを確認proxy.tsの調整注意事項
src/lib/locale.tsのコメントで言及されている、/(landing)/page.tsxをルート/に配置する要件を壊さないこと受け入れ条件
/) のルーティングが壊れない依存関係: #45 の完了が前提