文章目录
- NextAuth 能解决什么问题?
- 支持哪些登录方式?
- OAuth 登录
- 用户名密码登录
- Email Magic Link
- NextAuth 的核心概念
- 1. Session
- 2. JWT
- 3. Adapter
- Next.js App Router 中的使用方式
- NextAuth 的优点
- 开发效率高
- 安全
- Next.js 集成好
- NextAuth 的缺点
- 配置复杂
- 与 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
- Discord
- Microsoft
- Apple
例如:
signIn("github")用户点击后直接跳转 GitHub 授权登录。
用户名密码登录
通过 Credentials Provider:
Credentials({credentials:{username:{},password:{},},asyncauthorize(credentials){constuser=awaitlogin(credentials)if(!user)returnnullreturnuser}})适合:
- 企业内部系统
- SaaS 平台
- 自建用户体系
Email Magic Link
无需密码:
输入邮箱 ↓ 收到邮件 ↓ 点击链接 ↓ 自动登录适合:
- ToC 产品
- AI 产品
- 社区网站
NextAuth 的核心概念
1. Session
登录成功后:
constsession=awaitauth()返回:
{"user":{"name":"Tom","email":"tom@gmail.com"}}Session 相当于当前用户状态。
2. JWT
默认可以使用 JWT 保存登录状态:
session:{strategy:"jwt"}优点:
- 无状态
- 不依赖数据库
- 适合 Serverless
3. Adapter
如果要把用户信息存数据库:
NextAuth ↓ Adapter ↓ Prisma ↓ PostgreSQL常见 Adapter:
- Prisma
- MongoDB
- PostgreSQL
- MySQL
Next.js App Router 中的使用方式
Next.js 13+ 推荐:
// auth.tsimportNextAuthfrom"next-auth"importGitHubfrom"next-auth/providers/github"exportconst{handlers,auth,signIn,signOut}=NextAuth({providers:[GitHub]})API Route:
exportconst{GET,POST}=handlers服务端获取用户:
constsession=awaitauth()客户端登录:
<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 的缺点
配置复杂
刚接触时会遇到:
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)以及它的登录流程源码是怎么工作的。