首页 > 解决方案 > 如何访问 MongoDB 使用 NextAuth 创建的默认 ObjectId

问题描述

我想将数据推送到当前登录用户的 MongoDB 文档。

据我了解,当您使用 Twitter 登录(例如)时,Next Auth 会为该登录创建一个新的:用户、帐户和会话。使用 useSession() 挂钩,您可以访问用户的电子邮件、图像和名称,但不能访问 MongoDB 为您创建的 ObjectId。

这对我来说是个问题,因为我需要向我的服务器发出使用当前登录用户的 _id 值作为 PUT 请求 URL 的请求。我想使用 _id 值 mongo 为您提供而不是添加一个像 uuid 之类的东西。

有没有办法做到这一点?

标签: javascriptreactjsmongodbnext.jsnext-auth

解决方案


我最近遇到了这个问题,发现使用 [...nextauth].js 中的回调选项可以修改发送回客户端的内容。

我的 [...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;
      },
    },
  });

异步会话函数将返回存储在您的数据库中的用户对象,因此您可以将 id 添加到会话的用户对象中。

我现在可以像以前一样使用会话挂钩访问它,但这次可以访问 _id。

<div>{session.user._id}</div>

这是 NextAuth 站点的链接,它更深入地介绍了会话的力量:NextAuth


推荐阅读