NextAuth (Auth.js) でJWTトークンからuserIdを取得しセッションに含める
const authConfig = { // ... session: { strategy: 'jwt' }, callbacks: { // ... async session({ session, user }): Promise<Session> { console.log(user); // => undefined return session; }, },} satisfies NextAuthConfig;NextAuth (Auth.js v5)でセッションにuserIdを含めたいことがある。
しかしデータベースセッションとは異なり、JWTの場合はsessionコールバックで渡されるuserがundefinedになってしまう。
解決法
const authConfig = { // ... session: { strategy: 'jwt' }, callbacks: { // ... async session({ session, token: { sub } }): Promise<Session> { if (session.user && sub) session.user.id = sub; return session; }, },} satisfies NextAuthConfig;userではなくtoken.subからuserIdを取得できた。
{ "name": "xxx", "email": "xxx", "picture": "xxx", "sub": "xxx", "iat": xxx, "exp": xxx, "jti": "xxx"}というのもtokenがJWTのペイロード情報のようで、subプロパティにuserIdが設定される模様。