🕌

Next.jsでmiddlewareからnext-authのSessionを取り出すサンプル

2024/05/03に公開

以下のコードがサンプルです。Sessionはとれず代わりにその前のJWTがとれます。

注意点が2つ

  • かなりハック的な手法であり、next-authからは想定されていない使い方だと思います。いつnext-authの仕様変更で壊れてもおかしくありません
  • storategy: 'jwt'の場合のみしか検証していません
middleware.ts
/* eslint-disable tsdoc/syntax */
// middleware.ts

import { NextRequest, NextResponse } from 'next/server';
import { decode } from 'next-auth/jwt';
import { type JWT } from 'next-auth';
import { withAuth } from 'next-auth/middleware';

export default withAuth(async function middleware(req: NextRequest) {
  const session = await getSessionFromCookie(req);
});

async function getSessionFromCookie(req: NextRequest): Promise<JWT | null> {
  const cookie = req.cookies.get('next-auth.session-token')?.value;

  const decodedJwt = await decode({
    token: cookie,
    secret: process.env.NEXTAUTH_SECRET ?? '',
  });

  return decodedJwt as JWT | null; // キャストしないと@typesで拡張した定義が効かない
}

Discussion