首页 > 解决方案 > 存储用户数据 - NextAuth v3 与 MongoDB

问题描述

在我的 NextJS 应用程序中,我尝试使用 MongoDB 来存储 Next-Auth (v3) 包正在使用的用户数据。

/api/auth/[...nextauth].js文件中的代码:

import NextAuth from 'next-auth'
import Providers from 'next-auth/providers'

export default NextAuth({
    providers: [
        Providers.OneLogin({
            clientId: process.env.ONELOGIN_CLIENT_ID,
            clientSecret: process.env.ONELOGIN_CLIENT_SECRET,
            domain: process.env.ONELOGIN_DOMAIN
        })
    ],

    callbacks: {
        
        jwt: async (token, user, account, profile, isNewUser) => {
            if (user) { //-- if success, store the id of the user in jwt token
                token.uid = user.id;
            }
           return Promise.resolve(token);
        },
        
        session: async (session, user) => {
            session.user.uid = user.uid;    //-- store the id of the user in the session data
            return Promise.resolve(session);
        }
    },
    
    // Optional SQL or MongoDB database to persist users
    database: process.env.MONGODB_URL
    // database: {
    //     type: "mongodb",
    //     useNewUrlParser: true,
    //     url: process.env.MONGODB_URL,
    // },
})

但它总是抛出以下错误:

[next-auth][error][session_error] https://next-auth.js.org/errors#session_error 错误:找到可选依赖项 [mongodb] 但版本 [4.1.2] 不满足约束 [^3.5.9 ]

我已经安装了这个mongodb包。我无法弄清楚这个问题。我的 MongoDB url 工作正常,因为它能够执行其他数据库操作(如添加新数据、获取等)

标签: mongodbauthenticationnext.jsoneloginnext-auth

解决方案


问题是依赖的主要版本不同并且被认为是破坏:"^3.5.9"将满足 v3 中的更新。您的版本4.1.2将被视为超出范围,因为对主要版本的更改4将被视为重大/破坏性。

包.json

 "peerOptionalDependencies": {
    "mongodb": "^3.5.9",
    "mysql": "^2.18.1",
    "mssql": "^6.2.1",
    "pg": "^8.2.1",
    "@prisma/client": "^2.16.1"
  }, 

更新mongodb版本以支持主要版本的更改,"mongodb": "^3.5.9 || ^4","mongodb": "^4",

  "peerOptionalDependencies": {
    "mongodb": "^3.5.9 || ^4",
    "mysql": "^2.18.1",
    "mssql": "^6.2.1",
    "pg": "^8.2.1",
    "@prisma/client": "^2.16.1"
  }, 

推荐阅读