2016-08-22 33 views
0

我正在使用Hapi.js構建一個基於角色的授權的簡單網站(即,用戶可以看到這些路由,但管理員可以看到那些路由)。從我讀過的內容來看,這聽起來像Hapi的Scopes會是理想的選擇。Hapi用戶憑據對象來自哪裏?

但是,雖然我知道如何指定路由以便它需要一定的範圍,但文檔對於如何指定用戶具有的範圍很模糊。我該如何指定?這些物體的壽命是多少?他們是否隨每個請求一起發送?是否與JWT中使用的聲明配合?

我讀過Hapi API Docs,我讀過this article about using scopes for role based authorisation.

我正在使用高致病性禽流感認證 - jwt2驗證,如果暗示什麼。

TLDR;如何指定用戶可以訪問的範圍?

回答

0

我很確定這個答案只對hapi-auth-jwt2有效。這就是說:

用戶憑證對象是每個客戶端請求。默認情況下,它們包含JWT中聲明中的任何內容(即憑證==解碼)。如果你想覆蓋這個行爲,或者添加任何額外的東西到證書對象中,你可以在你的validateFunc中做到這一點。 ValidateFunc需要一個回調函數,第三個參數是你想要的憑證對象。舉例來說,如果您的用戶角色是在你的智威湯遜一「的UserRole」要求,這裏是你如何把它添加到您的credentials.scope:

// in server.register() 
server.auth.strategy("jwt", "jwt", { 
    key: publicKey, 
    validateFunc: validate, 
    verifyOptions: { 
    algorithms: ["RS256"] 
     } 
}); 

// elsewhere 
function validate(decoded, request, callback) { 
    decoded.scope = decoded.userRole; 
    return callback(null, true, decoded); 
}; 

就是這樣。剩下的就是hapi-auth-jwt2。現在,在您的server.route()調用,如果你的配置對象設置爲:

config: { 
    auth: { 
     strategy: "jwt", 
     scope: ["Manager", "Developer"] 
    } 
} 

...那麼只能與他們的任何要求的UserRole這些字符串將能夠訪問JWTs請求路線。