node-todo扩展指南:如何添加用户认证与权限管理 node-todo扩展指南如何添加用户认证与权限管理【免费下载链接】node-todoA simple Node/MongoDB/Angular todo app项目地址: https://gitcode.com/gh_mirrors/no/node-todonode-todo是一款基于 Node.js、MongoDB 和 Angular 构建的轻量级待办事项应用。本指南将教你如何为这个简单实用的工具添加用户认证与权限管理功能让你的待办事项更加安全可控。 准备工作在开始扩展前请确保你已完成以下准备克隆项目仓库git clone https://gitcode.com/gh_mirrors/no/node-todo cd node-todo安装必要的依赖npm install passport passport-local mongoose bcryptjs jsonwebtoken 第一步创建用户数据模型首先需要创建用户数据模型来存储用户信息。在项目中已有的数据模型结构app/models/todo.js基础上添加用户模型创建新文件app/models/user.js添加以下代码定义用户 Schemaconst mongoose require(mongoose); const bcrypt require(bcryptjs); const UserSchema new mongoose.Schema({ username: { type: String, unique: true, required: true }, password: { type: String, required: true }, role: { type: String, default: user, enum: [user, admin] } }); // 密码加密中间件 UserSchema.pre(save, async function(next) { if (!this.isModified(password)) return next(); this.password await bcrypt.hash(this.password, 10); next(); }); // 密码验证方法 UserSchema.methods.comparePassword async function(candidatePassword) { return bcrypt.compare(candidatePassword, this.password); }; module.exports mongoose.model(User, UserSchema); 第二步实现认证功能接下来需要实现用户注册和登录功能我们将使用 Passport.js 来处理认证逻辑创建认证配置文件config/passport.js在路由文件 app/routes.js 中添加认证相关路由// 导入用户模型和Passport配置 const User require(./models/user); const passport require(../config/passport); // 注册新用户 app.post(/api/auth/register, async (req, res) { try { const user new User({ username: req.body.username, password: req.body.password }); await user.save(); res.status(201).json({ message: 用户创建成功 }); } catch (err) { res.status(400).json({ message: 注册失败, error: err.message }); } }); // 用户登录 app.post(/api/auth/login, passport.authenticate(local), (req, res) { res.json({ user: req.user, token: generateToken(req.user) }); });️ 第三步添加权限中间件为了保护 API 路由需要创建权限验证中间件创建app/middleware/auth.js文件添加权限验证逻辑const jwt require(jsonwebtoken); const User require(../models/user); module.exports { authenticate: async (req, res, next) { try { const token req.headers.authorization?.split( )[1]; if (!token) return res.status(401).json({ message: 未提供认证令牌 }); const decoded jwt.verify(token, process.env.JWT_SECRET); req.user await User.findById(decoded.id); next(); } catch (err) { res.status(401).json({ message: 认证失败 }); } }, isAdmin: (req, res, next) { if (req.user req.user.role admin) { next(); } else { res.status(403).json({ message: 没有管理员权限 }); } } }; 第四步修改现有路由现在需要更新现有的待办事项路由添加认证和权限控制修改 app/routes.js 中的现有路由const auth require(./middleware/auth); // 受保护的路由 - 需要认证 app.get(/api/todos, auth.authenticate, function (req, res) { // 只返回当前用户的待办事项 Todo.find({ userId: req.user._id }, (err, todos) { if (err) res.send(err); res.json(todos); }); }); // 管理员路由 - 需要管理员权限 app.get(/api/admin/todos, [auth.authenticate, auth.isAdmin], function (req, res) { // 返回所有用户的待办事项 Todo.find({}, (err, todos) { if (err) res.send(err); res.json(todos); }); });✨ 第五步更新前端界面最后需要更新前端界面添加登录和注册表单修改 public/index.html 添加认证相关的 HTML 元素更新 public/js/controllers/main.js 添加认证逻辑修改 public/js/services/todos.js 在请求中添加认证令牌 测试与部署完成以上步骤后你可以通过以下命令启动应用并测试新功能# 设置环境变量 export JWT_SECRETyour_jwt_secret_key # 启动服务器 node server.js现在你的 node-todo 应用已经具备了用户认证和权限管理功能不同用户可以拥有自己的待办事项列表管理员还可以查看所有用户的待办事项。 总结通过本指南你学习了如何为 node-todo 应用添加用户认证与权限管理功能。主要步骤包括创建用户数据模型实现认证功能添加权限中间件修改现有路由更新前端界面这些功能可以保护你的应用数据安全同时提供更好的用户体验和数据隔离。你可以根据实际需求进一步扩展这些功能如添加社交媒体登录、密码重置等功能。【免费下载链接】node-todoA simple Node/MongoDB/Angular todo app项目地址: https://gitcode.com/gh_mirrors/no/node-todo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考