在 Angular 中使用 jsonwebtoken 导致 Uncaught ReferenceError: global is not defined

时间:2021-04-09 16:05:59

标签: angular jwt

我想使用 jwt.sign(payload, secretOrPrivateKey, [options, callback]) jsonwebtoken npm 的方法,但我不断收到错误

Uncaught ReferenceError: global is not defined
at Object../node_modules/buffer/index.js (index.js:43)
at __webpack_require__ (bootstrap:78)
at Object../node_modules/safe-buffer/index.js (index.js:2)
at __webpack_require__ (bootstrap:78)
at Object../node_modules/jws/lib/sign-stream.js (sign-stream.js:2)
at __webpack_require__ (bootstrap:78)
at Object../node_modules/jws/index.js (index.js:2)
at __webpack_require__ (bootstrap:78)
at Object../node_modules/jsonwebtoken/decode.js (decode.js:1)
at __webpack_require__ (bootstrap:78)

我阅读了很多关于这个问题的内容,添加了这个:

polyfills.ts
(window as any).global = window;

抛出新错误

psSupported.js:3 Uncaught ReferenceError: process is not defined
at Object../node_modules/jsonwebtoken/lib/psSupported.js (psSupported.js:3)
at __webpack_require__ (bootstrap:78)
at Object../node_modules/jsonwebtoken/verify.js (verify.js:6)
at __webpack_require__ (bootstrap:78)
at Object../node_modules/jsonwebtoken/index.js (index.js:3)
at __webpack_require__ (bootstrap:78)
at Module../src/app/app.component.ts (main.js:95)
at __webpack_require__ (bootstrap:78)
at Module../src/app/app.module.ts (app.component.ts:11)
at __webpack_require__ (bootstrap:78)

(我看到了几个示例,例如 express-jsonwebtoken,但它们是纯 js,我没有太多将完整的 js 库添加到 Angular 项目的经验。)

有什么办法可以解决这个问题,或者在 Angular 8.0 下使用另一个库中的 jsonwebtoken 之类的 sign 方法有什么替代方法吗?

1 个答案:

答案 0 :(得分:0)

最后我可以在 Angular 8 中使用 jsonwebtoken。

这是我所做的,我不确定他们做了什么,但我想帮助其他人让他们更接近他们,如果他们不断出现错误。

此列表的灵感来自控制台上关于 流、加密、全局、缓冲区、进程等

安装

    crypto-js
    stream

在默认的 js 文件中写入一些额外的行:

    browser.js
    node:  { crypto: true, stream: true },

    polyfills.js
    import { global } from '@angular/compiler/src/util';

    (window as any).global = window;
    global.Buffer = global.Buffer || require('buffer').Buffer;
    (window as any).process = {
        env: { DEBUG: undefined },
    };

配置:

    tsconfig.app.json
      "paths": {
        "stream": ["../node_modules/stream-browserify/index.js"],
        "crypto": ["../node_modules/crypto-js"]
      }

    tsconfig.json
        "paths": {
          "stream": ["../node_modules/stream-browserify/index.js"],
          "crypto": ["../node_modules/crypto-js"
          ]
      }

总而言之,它现在可以工作了。

萨巴