NextAuth中的Mongodb数据库配置,会话管理和使用

要点概括

本篇文章主要内容是NextAuth使用(包括会话管理) + 数据库存储(adapter) + 邮箱认证的内容

NextAuth与传统用户登录注册的区别

  • 使用NextAuth无需存储密码,注册和登录是一体化的,但你也可以显式区分注册和登录的逻辑。
  • 通过认证提供者(google, github, email等)进行用户认证
  • 自带用户管理和会话管理,不需要创建额外的 API 路由来手动处理登录或注册

1 依赖包安装

  • NextAuth
  • 数据库相关:mongodb-adapter, mongoose
  • 邮箱验证相关:nodemailer
npm install next-auth @next-auth/mongodb-adapter mongoose nodemailer

2 邮箱认证相关内容

详见之前的博客 - 使用mailgun进行邮箱认证的详细流程

3 配置 MongoDB 数据库

确保你有一个 MongoDB 数据库实例运行,可以是本地的或者云端的 MongoDB Atlas。记录好你的数据库连接字符串,存储在.env环境变量中。

MONGODB_URI=mongodb+srv://<username>:<password>@cluster0.0fvsbh4.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0

Mongodb-adapter和Mongoose并不矛盾,可以同时使用

NextAuth MongoDB Adapter:这个适配器是专为 NextAuth 设计的,用于将用户会话和验证数据存储到 MongoDB 数据库中。它直接与 MongoDB 交互,管理用户会话和其他认证相关的数据。

NextAuth会产生用户和会话管理相关的数据表,通过mongodb-adapter连接到数据库中存储。我们可以同时使用mongoose和mongodb-adapter,但要注意数据的分离,让mongodb-adapter只存储用户和会话的相关数据表,让mongoose用于存储其他的数据表

NextAuth的默认数据表

NextAuth会默认产生3个表:

  1. sessions
  2. users
  3. verification_tokens
    在这里插入图片描述

1 verification_tokens

用于存储认证链接的时效性。每次发送认证邮箱链接的时候都会产生一条verification_tokens数据,当认证通过的时候,这条token就会被删除。
在这里插入图片描述

2 sessions

存储会话管理相关的内容,拥有唯一的sessionToken,用于维持用户的登录状态、保证用户的安全性、确保用户状态没有过期。
在这里插入图片描述

3 users

存储NextAuth相关的用户基本信息,通常包括以下字段:

  • id:这是每个用户的唯一标识符。
  • name:用户的全名或显示名。
  • email:用户的电子邮件地址,用于认证和通信。
  • emailVerified:一个日期时间戳,表示用户的电子邮件地址已验证的时间。如果电子邮件未验证,则此字段可能为空或不存在。
  • image:用户的头像图片 URL。
  • provider:表示用户使用哪种认证提供者(如 Google、Facebook 等)。
  • providerAccountId:存储与特定提供者关联的账号标识符。
{
   
  "id": "123",
  "name": "John Doe",
  "email": "john.doe@example.com",
  "emailVerified": "2021-06-01T12:00:00.000Z",
  "image": "https://example.com/avatar.jpg",
  "createdAt": "2021-06-01T10:00:00.000Z",
  "updatedAt": "2021-06-01T11:00:00.000Z",
  "accounts": [
    {
   
      "provider": "google",
      "providerAccountId": "google-account-id"
    }
  ]
}

没有数据的字段默认不添加
没有内容的字段没有被添加

Next中的数据库链接

在应用中进行统一的数据库连接管理,这里是一个最简单的数据库连接文件。
👉🏻 需要特别注意的是mongoose使用的mongodb的版本和bson版本需要向mongodb-adapter使用的mongodb版本和bson版本兼容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值