Me gustaría enviar datos al documento MongoDB del usuario actualmente conectado.
Por lo que entiendo, cuando inicia sesión con Twitter (por ejemplo), Next Auth crea un nuevo: usuario, cuenta y sesión para ese inicio de sesión. Y usando el enlace useSession(), puede acceder al correo electrónico, la imagen y el nombre del usuario, pero no al ObjectId que MongoDB crea para usted.
Eso es un problema para mí porque necesito hacer solicitudes a mi servidor que usen el valor _id del usuario actualmente conectado, para la URL de solicitud PUT. Me gustaría usar el valor _id que mongo te proporciona en lugar de agregar uno con algo como uuid.
¿Hay alguna manera de hacer esto?
Recientemente me encontré con este problema y descubrí que usar la opción de devolución de llamada en [...nextauth].js le permite modificar lo que se envía al cliente.
Parte de mi [... nextauth].js:
export default async function auth(req, res) { return await NextAuth(req, res, { adapter: MongoDBAdapter({ db: (await clientPromise).db("myFirstDatabase"), }), providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, }), ], callbacks: { async signIn({ user, account, profile, email, credentials }) { return true; }, async session({ session, token, user }) { session.user._id = user.id; return session; }, }, });La función de sesión asíncrona devolverá el objeto de usuario que está almacenado en su base de datos, por lo que puede agregar la identificación al objeto de usuario de la sesión.
Ahora puedo acceder a él usando el gancho de sesión como antes, pero esta vez tengo acceso al _id.
<div>{session.user._id}</div>Aquí hay un enlace al sitio de NextAuth que profundiza más en el poder de la sesión: NextAuth