首先,授權決定必須在服務器端完成。按照您的建議在Angular.js的客戶端上做這件事也是一個好主意,但這只是爲了改善用戶的體驗,例如不向用戶顯示他們無權訪問的鏈接。
隨着JWTs,你可以嵌入有關令牌裏面的用戶聲明,就像這樣:
var jwt = require('jsonwebtoken');
var token = jwt.sign({ role: 'admin' }, 'your_secret');
要地圖的權限來表達的路線,你可以使用connect-roles打造乾淨,可讀授權中間件功能。假設例如您的智威湯遜在HTTP頭中發送和您有以下(幼稚)授權中間件:
// Naive authentication middleware, just for demonstration
// Assumes you're issuing JWTs somehow and the client is including them in headers
// Like this: Authorization: JWT {token}
app.use(function(req, res, next) {
var token = req.headers.authorization.replace(/^JWT /, '');
jwt.verify(token, 'your_secret', function(err, decoded) {
if(err) {
next(err);
} else {
req.user = decoded;
next();
}
});
})
有了這一點,你可以執行你的授權策略航線上,像這樣:
var ConnectRoles = require('connect-roles');
var user = new ConnectRoles();
user.use('admin', function(req) {
return req.user && req.user.role === 'admin';
})
app.get('/admin', user.is('admin'), function(req, res, next) {
res.end();
})
請注意,發行&驗證JWT有更好的選擇,如express-jwt,或使用passport與passort-jwt