无法使用jwt-decode解码jwt

til*_*lly 6 javascript angular

我正在尝试用jwt-decode解码我的令牌,但我不能.它给了我以下错误.有谁知道为什么?

错误:未捕获(在承诺中):TypeError:jwt_decode_1.default不是函数TypeError:jwt_decode_1.default不是RoleGuardService.canActivate中的函数(role-guard.service.ts?d7c4:19)

import jwt_decode from 'jwt-decode';

canActivate(route: ActivatedRouteSnapshot): boolean {
        // this will be passed from the route config
        // on the data property
        const expectedRole = route.data.expectedRole;
        const token = localStorage.getItem('token');
        // decode the token to get its payload
        const tokenPayload = jwt_decode(token);
        console.log(tokenPayload);
        if (
            !this.auth.isAuthenticated() ||
            tokenPayload.role !== expectedRole
        ) {
            this.router.navigate(['login']);
            return false;
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

pio*_*o90 14

我认为你应该像这样导入它:

import * as jwt_decode from 'jwt-decode';
Run Code Online (Sandbox Code Playgroud)

  • 由于某种原因,这在 Angular 10 中不起作用。当调用 jwt_decode 时,我收到一个运行时错误,指出 jwt_decode__WEBPACK_IMPORTED_MODULE_4__ 不是函数。 (4认同)

Sor*_*ean 7

根据文档+互联网搜索,正确的方法是:

1.安装包+类型

npm install --save jwt-decode

npm install --save @types/jwt-decode

  1. 当你导入 jwt_decode 时,你应该超越 tslint 的规则,你的代码看起来就像这样(上面有注释行)
 // @ts-ignore  
import jwt_decode from "jwt-decode";
Run Code Online (Sandbox Code Playgroud)

否则你会得到这样的错误 在此处输入图片说明

您还可以在 tsconfig.json 上添加规则,但有 1 次例外:)