【问题标题】:How do I access the default ObjectId MongoDB creates with NextAuth如何访问 MongoDB 使用 NextAuth 创建的默认 ObjectId
【发布时间】:2021-11-02 22:34:06
【问题描述】:

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

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

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

有什么办法吗?

【问题讨论】:

    标签: javascript reactjs mongodb next.js next-auth


    【解决方案1】:

    我最近遇到了这个问题,发现使用 [...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

    【讨论】:

    • 我几天前修复了这个问题,我忘了更新这篇文章。但你是对的,我用callbacks: { async session({ session, user }) { session.id = user.id; return Promise.resolve(session); }, }, database: process.env.MONGO_URI修复了它
    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 2015-10-06
    • 2011-07-04
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多