Node.js 写一个登录中间件

server/2025/1/21 2:58:06/

导语

登录中间件的作用是确保只有经过身份验证的用户能够访问受限资源。
本文将介绍如何使用 Node.js 编写一个简单而有效的登录中间件,帮助你保护你的应用程序。

创建项目

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

npm init -y

安装依赖

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

npm install express jsonwebtoken

创建登录中间件

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

// authMiddleware.jsconst jwt = require("jsonwebtoken");const authMiddleware = (req, res, next) => {// 从请求头中获取JWTconst 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 导入并应用:

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

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


http://www.ppmy.cn/server/160061.html

相关文章

从零开始:Gitee 仓库创建与 Git 配置指南

你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…

如何在vue中渲染markdown内容?

文章目录 引言什么是 markdown-it?安装 markdown-it基本用法样式失效?解决方法 高级配置语法高亮 效果展示 引言 在现代 Web 开发中,Markdown 作为一种轻量级的标记语言,广泛用于文档编写、内容管理以及富文本编辑器中。markdown…

【专题二 二叉树中的深搜】814. 二叉树剪枝

1.题目解析 2.讲解算法原理 通过决策树,抽象出递归的三个核心问题 这个问题要减去该节点,必须左子树全为0,右子树全为0,再判断该节点,则相当于一个后序遍历 对于一个节点,如果他本身就是空节点&#x…

Sentinel配置流控规则详解

前言 在微服务架构中,流量控制(Flow Control)是保障服务稳定性的重要手段之一。Sentinel作为一款开源的流量控制、熔断降级Java库,以其丰富的应用场景和完善的监控能力,在微服务保护中扮演了重要角色。本文将详细介绍…

[Java Web] 第四章 XML_Tomcat10_HTTP

第四章 XML_Tomcat10_HTTP 一 XML XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。 可扩展 三个字表面上的意思是XML允许自定义格式。但这不代…

owasp SQL 注入-03 (原理)

1: 先看一下注入界面: 点submit 后,可以看到有语法报错,说明已经起作用了: 报如下的错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near at line 1 2:…

智能新浪潮:亚马逊云科技发布Amazon Nova模型

在2024亚马逊云科技re:Invent全球大会上,亚马逊云科技宣布推出新一代基础模型Amazon Nova,其隶属于Amazon Bedrock,这些模型精准切入不同领域,解锁多元业务可能,为人工智能领域带来革新。 带你认识一起了解Amazon Nova…

iOS页面设计:UIScrollView布局问题与应对策略

在iOS开发中,UIScrollView是一个极其重要且常用的控件,它允许用户通过手势滑动查看大量内容。然而,在利用UIScrollView进行页面布局时,开发者往往会遇到一些挑战。本文将深入探讨UIScrollView布局中常见的问题,并提供相…