You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Next.js中使用Next-Auth登录时如何保存用户数据?

Next-Auth 登录时将用户信息存入数据库的实现方案

核心实现思路

Next-Auth 内置的**回调函数(Callbacks)**可以解决这个需求,其中signIn回调会在用户完成第三方登录(比如谷歌选账户后)触发,刚好适合在这里处理用户信息的数据库存储逻辑。

数据库代码的存放位置

  • 数据库连接、数据模型这类复用性代码,建议放在项目根目录的lib/或models/文件夹下(如果用Prisma则放在prisma/目录),方便全局调用。

具体代码实现

1. 配置数据库连接与用户模型(以Mongoose + MongoDB为例)

创建lib/db.js处理数据库连接:

import mongoose from 'mongoose';

const connectDB = async () => {
  if (mongoose.connections[0].readyState) return;
  await mongoose.connect(process.env.MONGODB_URI);
};

export default connectDB;

创建models/User.js定义用户数据模型:

import mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
  email: { type: String, required: true, unique: true },
  image: { type: String },
  createdAt: { type: Date, default: Date.now },
});

export default mongoose.models.User || mongoose.model('User', userSchema);

2. 修改Next-Auth配置文件(pages/api/auth/[...nextauth].js)

在配置中添加callbacks,在signIn回调里完成用户信息的存储:

import NextAuth from "next-auth/next";
import GoogleProvider from 'next-auth/providers/google';
import connectDB from '../../../lib/db';
import User from '../../../models/User';

export default NextAuth({
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_ID,
      clientSecret: process.env.GOOGLE_SECRET
    })
  ],
  callbacks: {
    async signIn({ user, account, profile }) {
      // 建立数据库连接
      await connectDB();
      // 检查用户是否已存在
      const existingUser = await User.findOne({ email: user.email });
      if (!existingUser) {
        // 不存在则创建新用户记录
        await User.create({
          email: user.email,
          image: user.image
        });
      }
      // 返回true允许登录流程继续
      return true;
    }
  }
});

3. 注意事项

  • 安装依赖:npm install mongoose next-auth
  • 在.env文件中配置MONGODB_URI、GOOGLE_ID、GOOGLE_SECRET三个环境变量
  • 若使用PostgreSQL等其他数据库,只需替换对应的连接方式和模型代码,核心逻辑依然是在signIn回调中处理存储。

内容的提问来源于stack exchange,提问作者Nasem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:55:20