首页 > 解决方案 > 检查配置文件是管理员还是用户并相应显示

问题描述

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

我在身份验证登录后尝试了/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
}

标签: javascriptnode.jsroutes

解决方案


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

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);
    }

});

推荐阅读