WHAT - NextAuth 权限认证机制

文章目录

    • [NextAuth 能解决什么问题?](#NextAuth 能解决什么问题?)
    • 支持哪些登录方式?
    • [NextAuth 的核心概念](#NextAuth 的核心概念)
      • [1. Session](#1. Session)
      • [2. JWT](#2. JWT)
      • [3. Adapter](#3. Adapter)
    • [Next.js App Router 中的使用方式](#Next.js App Router 中的使用方式)
    • [NextAuth 的优点](#NextAuth 的优点)
    • [NextAuth 的缺点](#NextAuth 的缺点)
      • 配置复杂
      • [与 Next.js 绑定较深](#与 Next.js 绑定较深)
    • 与其他方案对比
    • 总结

NextAuth.js(现在已并入 Auth.js 项目)是一个专门为 Next.js 提供的身份认证(Authentication)解决方案,用来快速实现登录、会话管理和权限控制。

官方文档:

Auth.js 官方文档

NextAuth 能解决什么问题?

在 Web 应用中,用户登录涉及很多复杂工作:

  • 用户身份验证(Authentication)
  • Session 管理
  • JWT Token 管理
  • OAuth 登录(Google、GitHub 等)
  • 登录状态持久化
  • 权限控制(RBAC)
  • 安全防护(CSRF、Cookie 安全等)

如果自己实现,需要写大量代码,而 NextAuth 帮我们封装好了这些能力。

支持哪些登录方式?

OAuth 登录

最常见:

  • GitHub
  • Google
  • Discord
  • Facebook
  • Microsoft
  • Apple

例如:

tsx 复制代码
signIn("github")

用户点击后直接跳转 GitHub 授权登录。

用户名密码登录

通过 Credentials Provider:

ts 复制代码
Credentials({
  credentials: {
    username: {},
    password: {},
  },
  async authorize(credentials) {
    const user = await login(credentials)

    if (!user) return null

    return user
  }
})

适合:

  • 企业内部系统
  • SaaS 平台
  • 自建用户体系

无需密码:

txt 复制代码
输入邮箱
↓
收到邮件
↓
点击链接
↓
自动登录

适合:

  • ToC 产品
  • AI 产品
  • 社区网站

NextAuth 的核心概念

1. Session

登录成功后:

ts 复制代码
const session = await auth()

返回:

json 复制代码
{
  "user": {
    "name": "Tom",
    "email": "tom@gmail.com"
  }
}

Session 相当于当前用户状态。

2. JWT

默认可以使用 JWT 保存登录状态:

ts 复制代码
session: {
  strategy: "jwt"
}

优点:

  • 无状态
  • 不依赖数据库
  • 适合 Serverless

3. Adapter

如果要把用户信息存数据库:

txt 复制代码
NextAuth
    ↓
 Adapter
    ↓
 Prisma
    ↓
 PostgreSQL

常见 Adapter:

  • Prisma
  • MongoDB
  • PostgreSQL
  • MySQL

Next.js App Router 中的使用方式

Next.js 13+ 推荐:

ts 复制代码
// auth.ts

import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"

export const {
  handlers,
  auth,
  signIn,
  signOut
} = NextAuth({
  providers: [GitHub]
})

API Route:

ts 复制代码
export const { GET, POST } = handlers

服务端获取用户:

ts 复制代码
const session = await auth()

客户端登录:

tsx 复制代码
<button onClick={() => signIn("github")}>
  Login
</button>

NextAuth 的优点

开发效率高

不用自己实现:

  • Cookie
  • Session
  • OAuth 流程

安全

内置:

  • CSRF Protection
  • Secure Cookies
  • OAuth 安全流程

Next.js 集成好

支持:

  • App Router
  • Server Components
  • Middleware
  • Edge Runtime

NextAuth 的缺点

配置复杂

刚接触时会遇到:

txt 复制代码
callbacks
session
jwt
adapter
provider
middleware

概念较多。

与 Next.js 绑定较深

虽然现在升级为 Auth.js,但历史上 NextAuth 与 Next.js 耦合较强。

与其他方案对比

方案 适用场景
NextAuth/Auth.js Next.js 项目首选
Clerk 开箱即用,功能丰富
Supabase Auth 已使用 Supabase
Firebase Auth Google 生态
Auth0 企业级认证
自研 JWT 简单项目、定制需求

总结

NextAuth(Auth.js)就是 Next.js 生态里最流行的认证框架,负责帮开发管理"用户登录、会话、OAuth 授权和权限控制",让开发者不用从零实现认证系统。

后面我们将进一步讲解 NextAuth 的整体架构(Provider → Callback → JWT → Session → Middleware)以及它的登录流程源码是怎么工作的。

相关推荐
掘金一周1 小时前
问卷调查:如果现在收到裁员通知,你手里的现金流能支撑多久? | 沸点周刊6.4
前端·人工智能·后端
wb043072011 小时前
前厅翻修记——从阿明的“8 秒点餐页“,看前端工程化与用户体验的全面升级
前端·架构·ux
riuphan1 小时前
揭秘 JS 类型转换:ToPrimitive 机制的神秘面纱
前端·javascript
最爱睡觉睡觉睡觉1 小时前
Flutter ThemeData 主题系统
前端·app
最爱睡觉睡觉睡觉1 小时前
pub.dev 常用包 vs npm 生态对照
前端·app
先吃饱再说1 小时前
从三行代码理解前端的“三权分立”:HTML、CSS、JS 各司其职
前端
biubiubiu_LYQ1 小时前
入门开发者基础篇之CSS浮动布局:一文吃透浮动底层逻辑
前端·css
最爱睡觉睡觉睡觉1 小时前
React Hooks → Flutter 等价写法
前端·app
最爱睡觉睡觉睡觉1 小时前
CSS → Flutter 对照手册
android·前端