别再在 Node.js 中重写认证——我构建了一个受 Devise 启发的 Auth Kit
Source: Dev.to
每次我开始一个新的 Node.js 后端时,认证往往成为项目中最重复且最脆弱的部分。
不管使用什么技术栈,我总是重复编写相同的内容:
- 用户注册流程
- 使用 bcrypt 进行密码哈希
- JWT 的生成与验证
- 基于角色的访问控制
- 将特定数据库的查询硬编码进认证逻辑
即使在多年构建 API 的经验后,认证仍然感觉像是复制粘贴的架构——每次都有些许差异,从未完全合适,并且与我使用的数据库或 ORM 紧密耦合。正是这种挫败感促使我创建了 node-auth-kit。
npm: https://www.npmjs.com/package/node-auth-kit
GitHub: https://github.com/learningyogendra-netizen/node-auth-kit
Node.js 生态系统中的“认证鸿沟”
Node.js 生态系统规模庞大,但认证通常落入以下两种极端之一:
- DIY 陷阱 – 像 Passport.js 这样的库功能强大但层次极低,导致认证逻辑散落在控制器、服务和模型中。
- 黑盒陷阱 – 框架和 SaaS 认证提供商速度快——直到你需要自定义流程、迁移数据库或控制数据时,才会发现自己被锁定了。
如果你曾使用 Ruby on Rails,可能会想念 Devise:
- 强大的默认配置
- 可预测的结构
- 需要时可扩展
我想要同样的 Devise 哲学,只是用于 Node.js。
核心理念:设计上数据库无关
大多数 Node.js 认证教程都会教你把认证直接写进 ORM 模型(如 Mongoose、Prisma 等)中。这种方式可以工作——但当你需要:
- 在隔离环境中测试认证
- 更换数据库
- 在不同项目间复用逻辑
时就会遇到困难。
node-auth-kit 采用 适配器架构,走了一条不同的路线:
- 核心引擎 – 处理认证逻辑(密码规则、JWT、角色、钩子)
- 适配器 – 负责与数据库的通信
无论底层数据存储是什么,你的认证逻辑都保持不变。
实际示例
而不是编写控制器,你只需配置认证引擎:
import {
deviceAuth,
mongooseAdapter,
createAuthRouter,
} from 'node-auth-kit';
deviceAuth
.init({
authType: 'jwt',
signupFields: ['email', 'password'],
defaultRole: 'user',
token: {
accessTokenTtl: '1h',
},
})
.useAdapter(
mongooseAdapter({
userModel: User,
})
);
app.use('/auth', createAuthRouter());
就是这样。现在你拥有:
POST /auth/registerPOST /auth/loginGET /auth/me
无需样板代码的路由保护
保护路由仅仅是中间件:
import { authenticate, authorize } from 'node-auth-kit';
app.get('/profile', authenticate, (req, res) => {
res.json(req.user);
});
app.get('/admin', authenticate, authorize('admin'), (req, res) => {
res.json({ message: 'Admin access granted' });
});
没有重复的逻辑。
生命周期钩子(被低估的特性)
node-auth-kit 支持生命周期钩子,以实现清晰的可扩展性:
beforeRegisterafterRegisterbeforeLoginafterLogin
示例:
deviceAuth.registerHook('afterRegister', async (user) => {
// send welcome email, log analytics, etc.
});
为什么我开源它
身份验证太关键,不能隐藏在私有仓库的代码中。每个团队都不应该在前 1–2 天里重新构建登录系统。node-auth-kit 是我尝试为 Node.js 身份验证创建一个共享的、有主见的起点。
当前状态与路线图
- ✅ JWT 认证
- ✅ 基于角色的授权
- ✅ 基于适配器的数据库支持
- ✅ 稳定的 Mongoose 适配器
- 🚧 Prisma 适配器(进行中)
- 🔜 刷新令牌
- 🔜 多设备会话
- 🔜 密码重置与邮件验证
在 60 秒内快速开始
npm i node-auth-kit
npm: https://www.npmjs.com/package/node-auth-kit
GitHub: https://github.com/learningyogendra-netizen/node-auth-kit
如果这能为您节省时间,给 GitHub 项目点个 ⭐ 真正有助于项目成长。
Final Thought
停止重写身份验证。
开始构建你的产品。