我有一个带有受保护的api调用的express-jwt的nodejs express服务。
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 email roles。" 现在,我如何编辑express-jwt的范围?
提前致谢!
答案 0 :(得分:1)
您的req.user是否包含任何数据?
在说明中它说:
“验证JsonWebTokens并设置req.user的中间件。”
这意味着当您在Authorization标头中使用vaild jwt-token向服务器发出请求时,“express-jwt”lib将解码该令牌并将其有效负载存储到“req.user”以使以下中间件变为利用。 即:这个标记:
"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”只是一种误导性示例,说明如果您的令牌数据包含参数“admin”,您将如何保护路线强>
如果您的req.user根本不包含任何数据,那么您可能会以错误的顺序连接您的middelware函数。为此,您必须发布更多代码进行调试。