我有一个带有express-jwt的nodejs Express服务,并带有 protected 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 规则中添加了 Angular 色,因此我可以让它在我的客户端中工作,而不是在 Nodejs 服务器中工作。
我从这里开始学习教程:https://github.com/auth0/express-jwt
我是不是错过了什么?我是否需要在 auth0 中设置规则以便添加管理字段?
编辑:在 git 问题中找到此描述: “您的 token 需要包含信息(例如: Angular 色)。为了使用 Auth0 执行此操作,您必须请求适当的范围,例如:scope=openid 电子邮件 Angular 色。” 现在,如何编辑 express-jwt 的范围?
提前致谢!
最佳答案
您的 req.user 包含任何数据吗?
在描述中说:
"Middleware that validates JsonWebTokens and sets req.user."
这意味着当您在授权 header 中使用有效的 jwt-token 向服务器发出请求时,“express-jwt”库将解码该 token 并将其有效负载存储到“req.user”,以便以下中间件利用。 即:此 token :
"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
}
所以,如果您的 token 数据中没有 admin 参数,则 req.user.admin 将是未定义的。 也就是说,您所引用的代码片段中的“admin”只是一种误导性示例,说明如果您的 token 数据包含参数“admin”,您可以如何保护路由
如果您的 req.user 根本不包含任何数据,您可能以错误的顺序连接中间件函数。为此,您将必须发布更多代码进行调试。
关于javascript - express-jwt 中缺少 "admin"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314194/