2016-10-28 117 views
0

我有一個帶有受保護api調用的express-jwt的nodejs express服務。在express-jwt中缺少「admin」屬性

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的範圍?

提前致謝!

+0

爲了更好地理解問題,可以包含您用來調用該API的示例訪問令牌嗎?它可以是過期的標記,也可以[刪除簽名部分](https://auth0.com/learn/json-web-tokens/);此外,如果有關負載的敏感信息,您可以屏蔽這些值(使用[jwt.io](https://jwt.io/))。 –

回答

1

您的req.user是否包含任何數據?

在說明它說:

「中間件驗證JsonWebTokens並設置req.user。」

,當你做與在Authorization頭一個vaild 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 
} 

所以,如果你沒有一個管理參數的令牌數據, req.user.admin將是未定義的。 也就是說在代碼中說,「admin」的片斷,你指的只是一種,如果你的令牌數據包含參數「管理員」

如果你能如何保護路由誤導例子你的req.user根本沒有包含任何數據,你可能以錯誤的順序連接你的middelware函數。爲此,您將不得不發佈更多代碼進行調試。