身份验证是 Web 应用程序的一个重要方面,确保只有授权用户才能访问某些资源。基于角色的身份验证 (RBAC) 更进一步,根据用户的角色为用户分配不同的权限。
在这篇文章中,我们将介绍:
✅ 什么是基于角色的身份验证?
✅ 为什么使用基于角色的身份验证?
✅ 如何在 MERN Stack 应用程序中实施 RBAC
什么是基于角色的身份验证?
基于角色的访问控制 (RBAC) 是一种安全方法,其中为用户分配角色,每个角色都有特定的权限。
例如,在电子商务应用程序中:
管理员可以添加、编辑或删除产品。
卖家可以管理自己的产品。
顾客只能查看和购买产品。
这确保用户只能执行与其角色相关的操作。
为什么使用基于角色的身份验证?
✔ 增强的安全性 – 防止未经授权的访问敏感操作。
✔ 可扩展性 – 随着系统的增长轻松添加新角色和权限。
✔ 更好的用户管理 – 无需修改代码即可分配权限。
如何在 MERN Stack 应用程序中实现 RBAC?
1️⃣ 设置用户模型 (MongoDB Mongoose)
在你的 models/user.model.js 中:
javascript
复制代码
const mongoose = require("mongoose");
const UserSchema = new mongoose.Schema({
用户名:{ 类型:字符串,必需:true,唯一:true },
电子邮件:{ 类型:字符串,必需:true,唯一:true },
密码:{ 类型:字符串,必需:true },
角色:{
类型:字符串,
枚举:[“管理员”,“卖家”,“客户”],
默认值:“客户”
}
});
module.exports = mongoose.model("User", UserSchema);
?在这里,每个用户都有一个角色字段,它决定了他们的权限。
2️⃣ 生成用于身份验证的 JWT 令牌
在你的controllers/auth.controller.js中:
javascript
复制代码
const jwt = require("jsonwebtoken");
const User = require("../models/user.model");
const login = async (req, res) =>; {
const { 电子邮件, 密码 } = req.body;
const user = wait User.findOne({ email });
if (!user || user.password !== 密码) {
return res.status(401).json({ message: "无效凭证" });
}
const token = jwt.sign({ userId: user._id, role: user.role }, "SECRET_KEY", { expiresIn: "1h" });
res.json({ token, role: user.role });
};
module.exports = { 登录 };
?此函数生成包含用户角色的 JWT 令牌。
3️⃣ 创建中间件来限制访问
在 middlewares/auth.middleware.js 中:
javascript
复制代码
const jwt = require("jsonwebtoken");
constauthenticate = (req, res, next) =>; {
const token = req.header("授权")?.split(" ")[1];
if (!token) return res.status(403).json({ message: "访问被拒绝" });
尝试{
const 解码 = jwt.verify(token, "SECRET_KEY");
req.user = 已解码;
下一个();
} 捕获(错误){
res.status(401).json({ message: "无效令牌" });
}
};
const 授权 = (角色) => {
返回(请求,res,下一个)=> {
if (!roles.includes(req.user.role)) {
return res.status(403).json({ message: "Forbidden" });
}
下一个();
};
};
module.exports = { 验证、授权 };
?验证 – 确保只有登录的用户才能访问路由。
?授权 – 根据角色限制访问。
4️⃣ 根据用户角色保护路由
在routes/admin.routes.js中:
javascript
复制代码
const express = require("express");
const { 验证、授权 } = require("../middlewares/auth.middleware");
const router = express.Router();
router.get("/admin-dashboard", 验证, 授权(["admin"]), (req, res) => {
res.json({ message: "欢迎来到管理仪表板" });
});
module.exports = 路由器;
?只有具有 admin 角色的用户才能访问 /admin-dashboard。
5️⃣ 在 React 中实现基于角色的 UI
在 App.js(前端)中:
javascript
复制代码
import { useState, useEffect } from "react";
从“axios”导入 axios;
const App = () =>; {
const [role, setRole] = useState(null);
useEffect(() => {
const token = localStorage.getItem("token");
如果(令牌){
const 解码 = JSON.parse(atob(token.split(".")[1]));
setRole(decoded.role);
}
}, []);
返回(
欢迎使用 MERN 基于角色的身份验证
{角色 === "admin" && 管理仪表板}
{角色===“卖家”&&卖家仪表板}
{角色===“客户”&&客户仪表板}
);
};
导出默认应用程序;
? UI 根据用户的角色显示不同的仪表板。
结论
基于角色的身份验证是现代 Web 应用程序中必不可少的安全措施。通过在 MERN Stack 中实现 RBAC,您可以有效地控制用户权限。
?后续步骤:
?添加管理员角色管理面板。
?对密码实施数据库加密。
?使用刷新令牌以获得更好的安全性。
想了解更多吗?在评论中留下你的问题! ?
以上是MERN 堆栈中基于角色的身份验证:完整指南的详细内容。更多信息请关注PHP中文网其他相关文章!

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

是的,JavaScript的引擎核心是用C语言编写的。1)C语言提供了高效性能和底层控制,适合JavaScript引擎的开发。2)以V8引擎为例,其核心用C 编写,结合了C的效率和面向对象特性。3)JavaScript引擎的工作原理包括解析、编译和执行,C语言在这些过程中发挥关键作用。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

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

WebStorm Mac版
好用的JavaScript开发工具

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

禅工作室 13.0.1
功能强大的PHP集成开发环境