【发布时间】:2018-08-13 04:22:19
【问题描述】:
在我的 Web 应用程序中,用户登录并创建了一个令牌。现在我想向这个令牌的有效负载添加一个声明:是否是管理员的布尔值。
我在网上搜索过,但似乎找不到如何在平均堆栈应用程序中实现这一点。
我的目标是当用户登录时,我可以使用令牌的有效负载检查用户是否是管理员。然后我可以锁定我的应用程序的特定部分,以便只有管理员可以访问它们。
这是服务中的登录功能
function logIn(user) {
return $http.post('/api/users/login', user, {
headers: {
Authorization: 'Bearer ' + getToken()
}
}).success(function(data) {
saveToken(data.token);
}).error(function(err){
return err;
});
}
这些是保存令牌和从本地存储中获取令牌的函数:
function saveToken(token) {
$window.localStorage['ptlab-app-token'] = token;
}
function getToken() {
return $window.localStorage['ptlab-app-token'];
}
这是我用来检查用户是否登录以解锁应用程序特定部分的功能:
function isLoggedIn() {
var token = getToken();
if (token) {
var payload = angular.fromJson($window.atob(token.split('.')[1]));
return payload.exp > Date.now() / 1000;
} else {
return false;
}
}
所以我想通过管理员检查执行与 isLoggedIn 相同的操作。但我似乎无法弄清楚如何自定义 jwt 令牌的有效负载并向有效负载添加声明。使用名为“admin”的声明,我可以轻松检查用户是否是管理员,而无需访问数据库。
有人有什么建议吗?
【问题讨论】:
-
请注意:在处理将 JWT 存储在 cookie 与 local/sessionStorage 上时,我通常非常有偏见,因此我觉得有必要确保您从安全角度了解这些差异:auth0.com/docs/security/store-tokens: ) 干杯!
标签: angularjs node.js mongodb express jwt