从零开始搭建群众权益平台(三)

继续上篇内容,我们来优化一下我们的后端代码,添加错误处理,增强安全性,添加用户管理和权限控制。

错误处理:

我们可以添加一个全局错误处理器来捕获和处理所有未处理的错误。以下是如何在Express中添加一个错误处理器:

// 在所有路由之后添加
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send({ message: 'An error occurred' });
});

增强安全性:

  1. 限制请求速率:我们可以使用如express-rate-limit的库来限制每个IP的请求速率,以防止暴力破解。

  2. 增强密码安全性:使用更复杂的哈希算法,例如argon2,并增加密码复杂度的要求。

  3. HTTPS:在生产环境中,应该使用HTTPS来加密传输的数据。

  4. 隐藏错误详情:在生产环境中,应该隐藏错误详情,只返回错误码和通用的错误消息,防止敏感信息泄漏。

用户管理和权限控制:

我们可以添加新的路由来管理用户,例如获取用户列表、修改用户信息、删除用户等。并且,我们可以通过JWT的payload来存储用户的角色信息,然后在路由处理器中根据用户的角色来决定是否允许进行某个操作。以下是一些示例代码:

// server.js
// 添加角色到用户数据模型
const userSchema = new mongoose.Schema({
  username: String,
  password: String,
  phone: String,
  role: { type: String, default: 'user' } // 默认为'user'
});
// ...

// 用户登录时添加角色到JWT的payload
const token = jwt.sign({ id: user.id, role: user.role }, 'secret');
// ...

// 添加一个中间件来验证用户的角色
function requireRole(role) {
  return (req, res, next) => {
    if (req.user.role !== role) {
      return res.status(403).send({ message: 'Forbidden' });
    }
    next();
  };
}

// 添加新的路由来管理用户,只有管理员可以访问
app.get('/api/users', requireRole('admin'), async (req, res) => {
  const users = await User.find();
  res.send(users);
});

app.delete('/api/users/:id', requireRole('admin'), async (req, res) => {
  await User.findByIdAndDelete(req.params.id);
  res.send({ message: 'User deleted' });
});

以上的代码是对现有功能的一些基本优化,还有很多细节和其他功能需要你去完善和实现。后续我们专栏将更新更复杂的权限控制(每个用户可能有多个角色,每个角色有不同的权限等)、用户的密码找回和更改、用户的个人信息管理等功能。

猜你喜欢

转载自blog.csdn.net/a871923942/article/details/131253711