检查个人资料是管理员还是用户,并相应显示

时间:2019-01-10 09:34:01

标签: javascript node.js routes

我正在尝试根据用户登录角色显示信息。如果用户是 admin ,则显示数据库中的所有数据;如果其他 user ,则仅显示其详细信息。

我在身份验证登录后尝试用于 / profile 路由

//get user details of login profile
router.get('/profile', checkAuth, (req, res, data) =>{  
    User.find(req.userData, function(err, users) {
        if (req.role === "admin") {
        return res.json(users);
        }else{
        res.send(req.userData);
        }
  });
});

if条件在这里不起作用if (req.role === "admin") 这里只有res.send(req.userData);在工作。

我已经提到了/login

中的角色
const adminEmail = "xyz@xyz.com";                                               
    const role = user[0].email===adminEmail? "admin" : "user";                                  
    const token = jwt.sign( 
    {
        email: user[0].email,
        userId: user[0]._id,
        phoneNo: user[0].phoneNumber,
        role
    }

作为回应,我得到

{
    "email": "xyz@xyz.com",
    "userId": "5c2dee17ea4264a40156f0",
    "phoneNo": "8xxx25",
    "role": "admin",
    "iat": 1547111673,
    "exp": 1547115273
}

3 个答案:

答案 0 :(得分:1)

您尝试检查req中的角色,但它是undefined。首先,您必须检查用户是否已登录。然后,如果用户是admin,请从数据库中获取一些数据。否则,发送用户的对象。

router.get('/profile', checkAuth, (req, res, data) =>{ 
    //  if req.userData is user object
    if(req.userData.role === 'admin') {
        User
        .find()
        .then(users => res.json(users))
        .catch(error => res.json({error}))
    } else {
        res.json(req.userData);
    }

});

答案 1 :(得分:1)

我已经通过这种方式解决了

router.get('/profile', checkAuth, (req, res) =>{  
    if (req.userData.role === "admin") { 
        User.find({}, function(err, users) {
            res.json(users);
       });
    }else{
        res.send(req.userData); 
    }
});

答案 2 :(得分:0)

你为什么要做user[0]

应直接为user["email"]user.email

为您的响应提供单个对象而不是对象数组。