在 NextAuth 中使用 Mongodb 适配器不起作用

Using Mongodb Adapter in NextAuth not working

我 git 克隆并复制 MUI Nextjs example project 并从那里开始。

他们说我可以从 NextAuth 门户网站复制 mongodb 适配器设置 here,基本上开箱即用。我把这个文件放在这个路径中:/src/lib/mongodb.js

这里我用的是CredentialsProvider。基本上我在 login & authentication 过程中使用我自己的 form

这是我的 /pages/api/auth/[...nextauth].js 文件:

import { MongoDBAdapter } from "@next-auth/mongodb-adapter";
import NextAuth from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import clientPromise from "../../../src/lib/mongodb";

export default NextAuth({
  secret: process.env.SECRET,
  adapter: MongoDBAdapter(clientPromise),
  providers: [
    CredentialsProvider({
      async authorize(credentials) {
        const { email, password } = credentials

        if(email !== 'test@test.com' || password !== 'password123') {
          throw new Error('User does not exists. Please make sure you insert the correct email & password.')
        }

        return {
          id: 1,
          name: 'Tester',
          email: 'test@test.com'
        }
      }
    })
  ],
  callbacks: {
    redirect: async ({ url, baseUrl }) => {
      return baseUrl
    }
  }
})

据我了解,我可以直接使用此适配器,它会默认创建 4 models/tables(用户、会话、帐户、VerificationToken)。所以我不需要自己创建它们。参考文档 here

根据NextAuth MongoDB Adapter documentation,我只需要在.env.local中指定MONGODB_URI即可。

这里是我的 /.env.local 文件内容:

NEXTAUTH_URL=http://localhost:3000
MONGODB_URI=mongodb+srv://<username>:<password>@rest.lvnpm.mongodb.net/<database_name>?retryWrites=true&w=majority
SECRET=someSecret
NODE_ENV=development

所以目前,它什么都不做。我不需要将 session.strategy 指定为 database,因为默认情况下 NextAuth 会识别如果我使用 adapter 选项。

我需要在这里做什么才能完成这项工作?任何帮助表示赞赏。 Here my github project

我刚刚在 NextAuth 中发现,如果我使用 CredentialsProvider。我将无法使用数据库策略来保存数据。您可以 here 查看 NextAuth 文档本身以了解原因