检查用户是否仅更改其数据

时间:2016-01-19 13:47:25

标签: node.js

我正在使用两种类型的用户构建API;管理员和客人。我创建了一个中间件,用于检查是否允许用户访问某个API端点,我将其设置为:

app.all('/api/*', [require('./validateReq')]);

我所有的路线都是这样的:

/api/*
/api/admin/*

validateReq检查令牌是否已通过并且是否有效。如果它有效,通常会处理请求。

我的用户模型有一个布尔值admin,它与令牌结合使用可验证其他/api/admin路由。

我现在的问题是如何确保用户仅修改他的数据。一个例子是他是否正在更新他的个人资料。什么可以阻止其他用户修改其他用户的个人资料?我的保护仅适用于允许登录用户访问/api路由和管理员用户访问/api/admin路由。

我需要类似“currentUser”字段的东西,我可以从任何地方访问并在我的所有路线中查看它。

2 个答案:

答案 0 :(得分:0)

  1. 您的每位用户都需要ID。
  2. 验证用户时,请检查其ID是否正确。
  3. 当用户尝试修改任何数据时,您必须检查这些数据。此检查在路线中。 (例如,每个用户的个人资料都有此用户ID,并在更新时添加条件'profileUserId === authenticateUserId')
  4. 如何在身份验证过程中获取userId? 如果您不确定如何实现它,您应该阅读它,因为它是重要的安全功能,例如在http://passportjs.org/docs中(这是此作业的超级模块)。 简而言之,如果您按会话进行身份验证,则会将ID存储在会话中。

答案 1 :(得分:0)

一个选项是公开一组不接受用户ID的路​​由。

实施例: 而不是/ profile / {id},暴露/ myprofile。

然后从令牌/ cookie中获取用户的id并进行相应的db / api调用。如果您需要两个不同角色的路由,那么这是您的中间件的责任。

此外,还有一个名为Connect-AccessControl的中间件库可能已经满足您关于安全访问控制(无耻插件)的使用案例。