在MEAN堆栈应用程序中自定义JWT令牌的有效负载
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MEAN堆栈应用程序中自定义JWT令牌的有效负载相关的知识,希望对你有一定的参考价值。
在我的Web应用程序中,用户登录并创建令牌。现在我想添加对此令牌的有效负载的声明:作为管理员与否的布尔值。
我在网上搜索过,但我似乎无法找到如何在Mean堆栈应用程序中实现它。
我的目标是当用户登录时,我可以使用令牌的有效负载检查用户是否是管理员。然后我可以锁定我的应用程序的特定部分,以便只有管理员才能访问它们。
这是服务中的登录功能
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;
}
}
所以我想通过admin检查与isLoggedIn相同。但我似乎无法弄清楚如何自定义jwt令牌的有效负载并添加对有效负载的声明。通过名为“admin”的声明,我可以轻松地检查用户是否是管理员而无需访问数据库。
有人有什么建议吗?
答案
你可以在创建令牌时调整令牌的有效负载(在Node.js中),这样你就可以简单地添加一个isAdmin
布尔值。之后,您可以解码令牌并检索isAdmin
的值,以查看用户是否是管理员。
令牌创建:
const payload = {
id: user._id,
isAdmin: user.isAdmin,
};
const token = jwt.sign(payload, "superSecret", {
expiresIn: 86400,
});
令牌解码:
const decoded = await jwt.verify(token, "superSecret");
const isAdmin = decoded.isAdmin;
另一答案
您可以直接转到JWT.io解码您的令牌并找到内容,甚至您可以在令牌解码中发送isAdmin密钥和值,并在节点的客户端验证它是jwt.decode,在角应用程序中也是如此。
以上是关于在MEAN堆栈应用程序中自定义JWT令牌的有效负载的主要内容,如果未能解决你的问题,请参考以下文章