限制用户通过 GET 请求访问管理员和_id详细信息

Restrict users from a GET request to access admin and _id details

提问人:arkanoid 提问时间:11/2/2020 更新时间:11/2/2020 访问量:307

问:

我正在配置服务器端,并尝试限制用户访问其 _id 和 admin 字段,默认情况下由 GET 请求设置为 false。原因是我想避免具有 PUT 请求的用户将其管理员角色更改为 TRUE,然后获得管理员能力。GET 请求的目的是在前端显示他们的详细信息。我使用的数据库是MongoDB。这是我的代码的样子:

Route.js

router.route('/my-profile')
.get(authenticate.verifyUser, (req,res,next) => {
    User.findOne({ _id: req.user._id })
    .populate('properties')
    .then((user) => {
        res.statusCode = 200
        res.setHeader('Content-Type', 'application/json')
        res.json(user)
    }, (err) => next(err))
    .catch((err) => next(err))
})
.post(authenticate.verifyUser, (req,res,next) => {
    res.statusCode = 403
    res.end('POST operation not supported on /my-profile')
}) 
.put(authenticate.verifyUser, (req,res,next) => {
    User.findByIdAndUpdate(req.user._id, {
        $set: req.body
    }, { new: true })// the new will return the updated in the reply
    .then((user) => {
        res.statusCode = 200
        res.setHeader('Content-Type', 'application/json')
        res.json(user)
    }, (err) => next(err))
    .catch((err) => next(err))
}) 
.delete(authenticate.verifyUser, (req,res,next) => {
    User.findByIdAndRemove(req.user._id)
    .then((resp) => {
        res.statusCode = 200
        res.setHeader('Content-Type', 'application/json')
        res.json(resp) // send response back to the client
    }, (err) => next(err))
    .catch((err) => next(err))
})

这就是它到目前为止在 Postman 中显示的内容:

{
    "admin": false,
    "_id": "5f9ee6c33beb0101e858af32",
    "username": "paul",
    "title": "mr",
    "email": "[email protected]",
    "firstName": "Mauri",
    "lastName": "Polin",
    "address": "23 rorer",
    "postcode": "se2 ofe",
    "country": "United Kingdom",
    "phoneNumber": "2",
    "gender": "male",
    "lookingFor": "rent",
    "joinDate": "2020-10-30T00:00:00.000Z",
    "createdAt": "2020-11-01T16:48:03.910Z",
    "updatedAt": "2020-11-01T17:38:52.736Z",
    "__v": 0
}

有人可以帮忙吗?谢谢!

node.js mongoDB Express 服务器端 获取请求

评论

0赞 11/2/2020
您是否测试过用户是否可以更改它?另外,我敢打赌管理员仅意味着他们是否已在管理数据库下注册。这对他们来说不会有太大变化。
0赞 arkanoid 11/2/2020
是的,我做到了,它确实改变了它。admin 只能从数据库或 shell 更改为 true,但任何用户都不应能够访问它,然后能够看到管理仪表板或其他一些潜在的内容,例如编辑或删除。用户架构将设置为 false 的 admin 字段显示为默认值。你认为我应该删除管理字段并以另一种方式使管理者能够工作吗?
0赞 11/2/2020
也许吧,但等待更多的人来帮忙

答: 暂无答案