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が設定される模様。