Node.js 写一个登录中间件

导语

登录中间件的作用是确保只有经过身份验证的用户能够访问受限资源。

本文将介绍如何使用 Node.js 编写一个简单而有效的登录中间件,帮助你保护你的应用程序。

创建项目

初始化一个新的 Node.js 项目

bash 复制代码
npm init -y

安装依赖

我们将使用 express 作为我们的 Web 框架,jsonwebtoken 用于生成和验证 JSON Web Tokens(JWT)

bash 复制代码
npm install express jsonwebtoken

创建登录中间件

在项目文件夹中创建一个新的文件,命名为 authMiddleware.js。在该文件中,我们将编写我们的登录中间件代码。

js 复制代码
// authMiddleware.js

const jwt = require("jsonwebtoken");

const authMiddleware = (req, res, next) => {
  // 从请求头中获取JWT
  const token = req.headers.authorization;

  if (!token) {
    // 如果没有提供JWT,则返回未授权的错误
    return res.status(401).json({ message: "Unauthorized" });
  }

  try {
    // 验证JWT并提取用户信息,使用与生成JWT时相同的密钥替换'secretKey'
    const decoded = jwt.verify(token, "secretKey");

    // 将用户信息存储在请求中,以供后续中间件或路由处理程序使用
    req.user = decoded;

    // 调用下一个中间件或路由处理程序
    next();
  } catch (err) {
    // 如果JWT验证失败,则返回未授权的错误
    return res.status(401).json({ message: "Unauthorized" });
  }
};

module.exports = authMiddleware;

使用

在需要进行登录验证的路由或中间件中,使用以下代码将 authMiddleware 导入并应用:

js 复制代码
const authMiddleware = require("./authMiddleware.js");

// 在需要进行登录验证的路由或中间件中使用 authMiddleware
app.get("/protected", authMiddleware, (req, res) => {
  // 这里是受保护的资源,只有登录用户才能访问
  res.json({ message: "Protected resource" });
});

总结

在上述示例中,中间件首先从请求头中获取 JWT(通常放在 Authorization 标头中)。然后,它使用提供的密钥(与生成 JWT 时相同)验证 JWT 的有效性。如果验证成功,它将从 JWT 中提取用户信息,并将其存储在请求对象的 user 属性中,以便后续中间件或路由处理程序使用。如果 JWT 验证失败或未提供 JWT,则返回未授权的错误响应。

请注意,上述示例使用了简化的密钥(secretKey)。在实际应用中,请使用更长且安全的密钥,并将其存储在环境变量或配置文件中,而不是直接硬编码在代码中。

使用该中间件,你可以轻松验证用户是否已登录,并保护需要登录才能访问的资源。

相关推荐
心柠19 分钟前
webpack
前端·webpack·node.js
FreeBuf_1 小时前
vm2 Node.js库曝严重沙箱逃逸漏洞(CVE-2026-22709)可导致任意代码执行
node.js
147API1 小时前
改名后的24小时:npm 包抢注如何劫持开源项目供应链
前端·npm·node.js
Prince-Peng2 小时前
技术架构系列 - 详解Kafka
分布式·中间件·架构·kafka·零拷贝·消息中间件·填谷削峰
爱吃山竹的大肚肚2 小时前
异步导出方案
java·spring boot·后端·spring·中间件
GIS开发者2 小时前
对nacos进行信创改造,将其中的tomcat替换为保兰德的中间件
java·中间件·nacos·tomcat·保兰德
抵梦2 小时前
NPM、CNPM、PNPM:Node.js 依赖工具对比与选择
前端·npm·node.js
晚风_END2 小时前
postgresql数据库|连接池中间件pgbouncer的部署和配置详解
数据库·后端·spring·postgresql·中间件·个人开发
郑州光合科技余经理1 天前
同城配送调度系统实战:JAVA微服务
java·开发语言·前端·后端·微服务·中间件·php
哪里不会点哪里.1 天前
NVM:Node.js 版本管理工具
node.js