实现 NextAuth 和 Mongoose 的正确方法

问题描述 投票:0回答:1

以下是我的代码

import CredentialsProvider from 'next-auth/providers/credentials';
import GitHubProvider from 'next-auth/providers/github';
import GoogleProvider from 'next-auth/providers/google';
import User from '@/models/User';
import { connectDB } from '@/utils/dbconnect';

connectDB()

export const authOptions: any = {
    debug: false,
    session: {
        strategy: 'jwt',
    },
    pages: {
        signIn: '/login',
    },
    providers: [
        GitHubProvider({
            clientId: "xxxxxxxxxxxxxxxxxx",
            clientSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        }),
        GoogleProvider({
            clientId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            clientSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        }),
    ],
    callbacks: {
        async session({ token, session }: { token: any; session: any }) {
            const { user } = session
            let existingUser = await User.findOne({ email: user.email });

            if (!existingUser) {
                // Create new user if not exists
                existingUser = await User.create({
                    name: user.name,
                    email: user.email,
                    // Add other necessary fields
                });
            }

            return {
                ...session,
                user: { ...session.user, id: existingUser._id },
            };
        },
    }
};

此代码工作正常,数据库正在与用户一起创建,并且获取也工作正常。但我需要确保这是正确的方法。我还想看看这和下一个认证中的

adapter
选项有什么区别。

mongodb mongoose next.js next-auth
1个回答
0
投票

这种方法很大程度上缺乏有效适配器所包含的更广泛的处理范围。您可能会发现他们关于创建适配器的文章很有帮助:https://next-auth.js.org/tutorials/creating-a-database-adapter

© www.soinside.com 2019 - 2024. All rights reserved.