我正在使用两种类型的用户构建API;管理员和客人。我创建了一个中间件,用于检查是否允许用户访问某个API端点,我将其设置为:
app.all('/api/*', [require('./validateReq')]);
我所有的路线都是这样的:
/api/*
/api/admin/*
validateReq
检查令牌是否已通过并且是否有效。如果它有效,通常会处理请求。
我的用户模型有一个布尔值admin
,它与令牌结合使用可验证其他/api/admin
路由。
我现在的问题是如何确保用户仅修改他的数据。一个例子是他是否正在更新他的个人资料。什么可以阻止其他用户修改其他用户的个人资料?我的保护仅适用于允许登录用户访问/api
路由和管理员用户访问/api/admin
路由。
我需要类似“currentUser”字段的东西,我可以从任何地方访问并在我的所有路线中查看它。
答案 0 :(得分:0)
如何在身份验证过程中获取userId? 如果您不确定如何实现它,您应该阅读它,因为它是重要的安全功能,例如在http://passportjs.org/docs中(这是此作业的超级模块)。 简而言之,如果您按会话进行身份验证,则会将ID存储在会话中。
答案 1 :(得分:0)
一个选项是公开一组不接受用户ID的路由。
实施例: 而不是/ profile / {id},暴露/ myprofile。
然后从令牌/ cookie中获取用户的id并进行相应的db / api调用。如果您需要两个不同角色的路由,那么这是您的中间件的责任。
此外,还有一个名为Connect-AccessControl的中间件库可能已经满足您关于安全访问控制(无耻插件)的使用案例。