Angular 在typescript中解析/读取解码的jwt令牌数据

Angular 在typescript中解析/读取解码的jwt令牌数据,angular,typescript,jwt,Angular,Typescript,Jwt,如何使用这个.jwtHelper.decodeToken(sessionStorage.getItem('encodedToken')解析下面的对象,它是一个解码的jwt令牌,并且需要从角色获得应用程序(QWE)的权限 name:"ram8" roles:"{"userid":"991635","privileges":{"QWE":["QQT","RR","RRR","FCC","WWW","WRD","DML","UDE","SDE"]}}" sub:"123456" user.tenant

如何使用这个.jwtHelper.decodeToken(sessionStorage.getItem('encodedToken')解析下面的对象,它是一个解码的jwt令牌,并且需要从角色获得应用程序(QWE)的权限

name:"ram8"
roles:"{"userid":"991635","privileges":{"QWE":["QQT","RR","RRR","FCC","WWW","WRD","DML","UDE","SDE"]}}"
sub:"123456"
user.tenant.name:"DefaultDomain"
__proto__:Object
现在,使用下面的代码获取角色

public getUserRoles(){
    let userInfoJSON = JSON.parse(JSON.stringify(this.jwtHelper.decodeToken(sessionStorage.getItem('encodedToken'))));
    for (let prop in userInfoJSON) {
        if(prop === 'roles'){
            let roles = JSON.parse(userInfoJSON[prop]);
            for(let rProp in roles){
                if(rProp === 'privileges'){
                    let privileges = JSON.parse(JSON.stringify(roles[rProp]));
                    for(let prev in privileges){
                        console.log("prev "+prev+" "+privileges[prev])
                        this.userRoles = privileges[prev];
                    }
                }   
            }
            break;
        }
    }
    console.log("AuthServiceuserRoles "+this.userRoles);
}

JSON.parse
解析整个令牌,以及嵌套对象

您不需要for循环,只需使用
let roles=userInfoJSON.roles
let privileges=roles.privileges

以下是我用来查看用户是否具有特定角色的示例代码:

let token = localStorage.getItem(jwtTokenName);
    if (token && tokenNotExpired(null, token)) {
        let tokenDecoded = jwtHelper.decodeToken(token);
        if (tokenDecoded.roles && tokenDecoded.roles.length > 0) {
            for (let i = 0; i < tokenDecoded.roles.length; i++) {
                const role = tokenDecoded.roles[i];
                if (roles.indexOf(role) >= 0) {
                    return true;
                }
            }
        }
    }
let token=localStorage.getItem(jwtTokenName);
if(令牌和令牌notexpired(null,令牌)){
让tokenDecoded=jwtHelper.decodeToken(令牌);
if(tokenDecoded.roles&&tokenDecoded.roles.length>0){
for(设i=0;i=0){
返回true;
}
}
}
}