🕌
Next.jsでmiddlewareからnext-authのSessionを取り出すサンプル
以下のコードがサンプルです。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