我有一个带有express-jwt的nodejs express服务,它有一个受保护的api调用。
app.get('/protected',
jwtCheck, function(req, res) {
console.log(JSON.stringify(req.user));
if (!req.user.admin)
return res.send("user");
res.send("admin");
});问题是,req.user对象不包含"admin“字段。我已经在Auth0规则中添加了角色,所以我可以让它在我的客户机中工作,只是不能在nodejs服务器中工作。
我从这里开始学习教程:https://github.com/auth0/express-jwt
我是不是漏掉了什么?是否需要在auth0中设置规则才能添加管理字段?
编辑:在git问题中找到了这样的描述:“你的令牌需要包含信息(例如:角色)。为了在Auth0中这样做,你必须请求适当的范围,例如: scope=openid电子邮件角色。”现在,如何编辑express-jwt的作用域?
提前感谢!
发布于 2016-11-04 18:44:43
您的req.user是否包含任何数据?
在描述中,它说:
“验证JsonWebTokens并设置req.user的中间件。”
这意味着当您在Authorization头中使用有效的jwt-token向服务器发出请求时,"express-jwt“库将对该令牌进行解码,并将其有效负载存储到"req.user”,以供后续中间件使用。Ie:此内标识:
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50aWQiOiIxIiwiaWQiOiIyMzQ0IiwidXNlcm5hbWUiOiInTWFjRyciLCJpYXQiOjE0NzgyNTI1MzIsImV4cCI6MTQ3ODI1NDUzMn0.T_vPE8_Y2JQF9Xq9L2jOdcDoZC7rdDJioFb0DaDe9Zk"它解码为:
{
"accountid": "1",
"id": "2344",
"username": "'MacG'",
"iat": 1478252532,
"exp": 1478254532
}将导致
req.user = {
"accountid": "1",
"id": "2344",
"username": "'MacG'",
"iat": 1478252532,
"exp": 1478254532
}因此,如果您的令牌数据中没有admin参数,req.user.admin将是未定义的。在令牌数据包含参数“”的情况下,管理员(即代码片段中的"admin“)只是一种误导性的示例,说明如何保护路径
如果您的req.user根本不包含任何数据,那么您可能以错误的顺序挂接了您的中间件函数。为此,您将不得不发布更多代码以进行调试。
https://stackoverflow.com/questions/40314194
复制相似问题