无法使用jwt-decode解码jwt

时间:2018-02-13 15:23:23

标签: 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;
    }

4 个答案:

答案 0 :(得分:14)

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

import * as jwt_decode from 'jwt-decode';

答案 1 :(得分:5)

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

1。安装软件包和类型

npm install --save jwt-decode

npm install --save @types/jwt-decode

  1. 当您导入jwt_decode时,应该超越tslint的规则,您的代码将看起来完全像这样(上面带有注释行)
 // @ts-ignore  
import jwt_decode from "jwt-decode";

否则,您将得到这样的错误 enter image description here

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

答案 2 :(得分:1)

我有同样的错误,但是经过多次尝试,我确实设法通过使用另一种方法解决了这个问题:

private decode(token: string) {
    try {
        return JSON.parse(atob(token.split(".")[1]));
    } catch (e) {
        console.log("error decoding token");
    }
}

function atob()references

答案 3 :(得分:1)

jwt_decode 一直是一个 CommonJS 模块,通常以 const jwt_decode = require('jwt-decode'); 的形式导入,这是 Node.js 使用的。

使用 JS import 语句导入 CommonJS 库的方式是 import * as library-name from 'library-name;

像 Angular 10 这样的现代框架在使用具有 CommonJS 格式的包时会发出警告,因为它们通常不能被摇树。

此库的第 3 版(现在处于测试阶段)包含更现代的 ESM 构建,这正是 JS 导入语句的用途,因此可以使用 import jwt_decode from 'jwt-decode'; 以常规方式导入现代 ESM 包。这是一个重大更改,因此我创建了一个新的主要版本 3

我们仍然有一个 CommonJS 构建,但默认情况下,大多数现代 Web 构建系统(不是节点)将使用 ESM 构建。

如果您在安装 lib 时签出 package.json 文件,您会注意到其中有两个版本。

{
    ...
    "main": "build/jwt-decode.cjs.js",
    "module": "build/jwt-decode.esm.js",
    ...
}

references