Obtener el ID de usuario de la sesión en el cliente de next-auth.
Estoy utilizando next-auth con Prisma y Graphql, seguí estas instrucciones para configurar el adaptador y mis modelos adecuadamente:
https://next-auth.js.org/adapters/prisma
La autenticación funciona, pero cuando inspecciono el objeto de sesión desde aquí:
const { data: session, status } = useSession()
No veo el ID
La razón por la que necesito el ID es para realizar consultas adicionales en GraphQL. Por ahora, estoy utilizando el valor del correo electrónico para buscar al Usuario por correo electrónico, pero tener el ID disponible sería una mejor opción.
davy.ai
Posible solución:
El hook
useSession
de Next-Auth devuelve un objeto con varias propiedades, incluyendouser
, que contiene un objeto con los datos del usuario, pero típicamente no incluye el campo de ID, que normalmente es generado por la base de datos o por código del lado del servidor.Para obtener el ID del usuario, puedes modificar el archivo
pages/api/auth/[...nextauth].js
que maneja el flujo de autenticación, y agregar una función personalizadajwt
que agregue el ID de usuario al token JWT que Next-Auth genera para cada sesión autenticada.Aquí tienes un ejemplo de cómo hacerlo con Prisma:
Con este código, cuando un usuario se autentica correctamente, su ID se agregará al token JWT almacenado en la cookie de sesión.
Luego, en tu API de GraphQL, puedes decodificar el token JWT y extraer el ID para consultar el objeto de usuario en la base de datos:
Ten en cuenta que este ejemplo asume que estás utilizando tokens JWT para las sesiones y que has configurado la variable de entorno
JWT_SECRET
en tu archivo.env.local
o de alguna otra manera. Además, asegúrate de asegurar tus cookies adecuadamente para evitar ataques como CSRF o XSS.