我正在尝试根据用户登录角色显示信息。如果用户是 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
}
答案 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
。
为您的响应提供单个对象而不是对象数组。