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