别再在 Node.js 中重写认证——我构建了一个受 Devise 启发的 Auth Kit

发布: (2025年12月27日 GMT+8 12:31)
5 min read
原文: Dev.to

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 生态系统规模庞大,但认证通常落入以下两种极端之一:

  1. DIY 陷阱 – 像 Passport.js 这样的库功能强大但层次极低,导致认证逻辑散落在控制器、服务和模型中。
  2. 黑盒陷阱 – 框架和 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/register
  • POST /auth/login
  • GET /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 支持生命周期钩子,以实现清晰的可扩展性:

  • beforeRegister
  • afterRegister
  • beforeLogin
  • afterLogin

示例:

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

停止重写身份验证。
开始构建你的产品。

Back to Blog

相关文章

阅读更多 »

实验性 Hono auth npm 包

我正在构建的东西:我正在创建一个 auth package,开发者可以将其直接放入他们的应用中,而无需编写常规的登录、注册、JWT、电子邮件验证等样板代码。