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)。在实际应用中,请使用更长且安全的密钥,并将其存储在环境变量或配置文件中,而不是直接硬编码在代码中。

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

相关推荐
毕设源码-朱学姐1 天前
【开题答辩全过程】以 基于Node.js的书籍分享平台设计与实现为例,包含答辩的问题和答案
node.js
波波0071 天前
每日一题:中间件是如何工作的?
中间件·.net·面试题
前端 贾公子1 天前
Node.js 如何处理 ES6 模块
前端·node.js·es6
周杰伦的稻香1 天前
Hexo搭建教程
java·node.js
毕设源码-钟学长1 天前
【开题答辩全过程】以 基于node.js vue的点餐系统的设计与实现为例,包含答辩的问题和答案
前端·vue.js·node.js
玄同7651 天前
LangChain 1.0 框架全面解析:从架构到实践
人工智能·深度学习·自然语言处理·中间件·架构·langchain·rag
朝朝暮暮an2 天前
Day 2|Node.js 运行机制、模块系统与异步初探
node.js
dear_bi_MyOnly2 天前
【多线程——线程状态与安全】
java·开发语言·数据结构·后端·中间件·java-ee·intellij-idea
aidou13142 天前
Visual Studio Code(VS Code)安装步骤
vscode·npm·node.js·环境变量
止观止2 天前
告别 require!TypeScript 5.9 与 Node.js 20+ 的 ESM 互操作指南
javascript·typescript·node.js