内容概述
本文扩展了之前的教程,涵盖了使用 Express.js 创建基本 CRUD API,重点关注关键的安全方面:验证、身份验证和授权。 我们将以前面的示例为基础,因此建议熟悉该材料。 完整的项目可在 GitHub 上获取(下面提供的链接)。
关键概念
-
验证:确保用户提供的数据符合预定义的规则和标准。 这对于安全至关重要,可以防止 SQL 注入等漏洞。 一些资源强调了稳健验证的重要性(下面提供的链接)。
-
身份验证:验证用户的身份。这通常涉及根据存储的记录检查凭据(例如用户名/电子邮件和密码)。
-
授权:确定允许用户执行哪些操作。 这根据用户角色和权限控制对资源的访问。
实施验证
我们将为 name
、amount
和 date
字段创建验证函数:
-
name
: 字符串,非空,10-255 个字符。 -
amount
: 数字或数字字符串,正数,非空。 -
date
: 字符串,可选(如果省略,则默认为当前日期),YYYY-MM-DD 格式。
这些函数(位于validations.js
)利用类型检查和基本格式验证。 可以添加更全面的验证(例如日期范围检查)。
// validations.js (excerpt) const isString = (arg) => typeof arg === "string"; const isNumber = (arg) => !isNaN(Number(arg)); function isValidName(name) { /* ... */ } function isValidAmount(amount) { /* ... */ } function isValidDate(date) { /* ... */ } module.exports = { isValidName, isValidAmount, isValidDate };
添加身份验证和授权
为了进行演示,我们将使用内存数据存储(对象数组)来存储用户和费用。 这不适合生产。
data.js
文件存储用户和费用数据:
// data.js (excerpt) let users = [ { id: "...", email: "...", password: "..." }, //Example User // ...more users ]; let expenditures = [ { id: "...", userId: "...", name: "...", amount: ..., date: "..." }, //Example Expense // ...more expenses ]; module.exports = { expenditures, users };
注册端点 (/users/signup
)
此端点创建新用户。 它验证电子邮件和密码,检查电子邮件重复项,生成 UUID,并(仅适用于本演示)存储原始密码。 返回 Base64 编码的身份验证令牌 (email:UUID)。 为了简单起见,省略了密码哈希,但它在生产环境中至关重要。
登录端点 (/users/login
)
此端点对现有用户进行身份验证。 它会验证凭据并在成功时返回 Base64 编码的身份验证令牌。
受保护端点
为了保护端点(例如,/expenditures
),我们需要在请求标头(Authorization
标头)中使用身份验证令牌。令牌被解码,用户被验证,并且只返回用户自己的数据。
// validations.js (excerpt) const isString = (arg) => typeof arg === "string"; const isNumber = (arg) => !isNaN(Number(arg)); function isValidName(name) { /* ... */ } function isValidAmount(amount) { /* ... */ } function isValidDate(date) { /* ... */ } module.exports = { isValidName, isValidAmount, isValidDate };
结论
本文提供了 Node.js/Express.js API 中验证、身份验证和授权的基本介绍。 请记住,此处演示的安全措施是出于教育目的而简化的,并且不应在生产系统中使用。 生产就绪的应用程序需要强大的密码哈希、安全令牌管理(推荐 JWT)和数据库集成。
资源
- 源代码
- 使用 Express 的基本 CRUD API
- 为什么表单验证很重要
- 输入验证:客户端还是服务器端?
- 后端数据验证
- 数据验证最佳实践
- 捍卫D
- JavaScript 基础知识
- OWASP 输入验证备忘单
(请记住将括号中的占位符替换为实际链接。)
以上是验证、认证和授权的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具