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