import NextAuth from "next-auth" import ZITADEL from "next-auth/providers/zitadel" export const { handlers, auth, signIn, signOut } = NextAuth({ providers: [ ZITADEL({ clientId: process.env.ZITADEL_CLIENT_ID!, clientSecret: process.env.ZITADEL_CLIENT_SECRET!, issuer: process.env.ZITADEL_ISSUER, }), ], callbacks: { async jwt({ token, account }) { // account is only present on the initial sign-in if (account?.access_token) { const res = await fetch( `${process.env.ZITADEL_ISSUER}/oidc/v1/userinfo`, { headers: { Authorization: `Bearer ${account.access_token}` } } ) const userinfo = await res.json() console.log("[auth] ZITADEL userinfo:", JSON.stringify(userinfo, null, 2)) token.name = userinfo.name ?? userinfo.preferred_username ?? token.name } return token }, session({ session, token }) { if (token.name) session.user.name = token.name as string return session }, }, })