以下是我的代码
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
选项有什么区别。
这种方法很大程度上缺乏有效适配器所包含的更广泛的处理范围。您可能会发现他们关于创建适配器的文章很有帮助:https://next-auth.js.org/tutorials/creating-a-database-adapter。