代码之家  ›  专栏  ›  技术社区  ›  carpinchosaurio

在angular cli应用程序中使用jsonwebtoken时出错

  •  4
  • carpinchosaurio  · 技术社区  · 8 年前

    我有一个angular2应用程序,它使用 angular-cli 用于脚手架和其他任务,但现在我不能使用 jsonwebtoken 在我的angular2应用程序中。

    我已经添加了依赖项

    yarn add --save jsonwebtoken

    实际上,我可以在 node_modules

    import { jwt } from 'jsonwebtoken'

    在我的TypeScript代码中,IDE没有给出任何警告,因此它可以正确地找到依赖项。

    npm start yarn start 我有以下错误消息

    ERROR in ./~/isemail/lib/index.js
    Module not found: Error: Can't resolve 'dns' in '/home/$MY_USER_NAME_PLACE_HOLDER/dir/to/my/app/node_modules/isemail/lib'
     @ ./~/isemail/lib/index.js 5:12-26
     @ ./~/joi/lib/string.js
     @ ./~/joi/lib/index.js
     @ ./~/jsonwebtoken/sign.js
     @ ./~/jsonwebtoken/index.js
     @ ./src/app/_auth/authentication.service.ts
     @ ./src/app/app.component.ts
     @ ./src/app/index.ts
     @ ./src/main.ts
     @ multi main
    
    ERROR in [default] /home/$MY_USER_NAME_PLACE_HOLDER/dir/to/my/appsrc/app/_auth/authentication.service.ts:41:24 
    Property 'validate' does not exist on type 'typeof "/home/$MY_USER_NAME_PLACE_HOLDER/dir/to/my/app/node_modules/@types/jsonwebtoken/index"'.
    

    当我在互联网上搜索错误时,我跟踪了一系列对话和相关项目。 我发现:

    • 也有类似的问题,但并非如此 detailed 它没有答案。

    • 中的一些相关错误 react-validation-mixin , isemail joi 把我带到这里 one ,当他们描述类似的问题时,导入依赖于 dns , net 或者来自node的一些其他本机模块,这让我认为在使用此类库时存在一些问题 webpack (我没有专业知识来确定这一点,如果我错了,请纠正)解决方法是在 webpack.config

      node: {
        net: 'empty',
        tls: 'empty',
        dns: 'empty'
      }
      

    但我的问题是,使用angular cli no way to override webpack config 我们无意改变这一点。

    所以我不知道在这里该怎么做,您知道如何在angular cli应用程序中使用jsonwebtoken吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   luvaas    8 年前

    我在尝试在客户端使用jsonwebtoken时遇到了同样的问题(在我的Express应用程序中,jsonwebtoken在服务器端工作正常)。

    简单的答案是,可能无法使用 https://github.com/Hendrixer/jwt-decode 在angular应用程序中使用jsonwebtoke。如果您只想解码JWT的客户端以执行验证等操作,那么这个库有点重,而该模块实际上是为node.js中的服务器端使用而设计的。

    然而,在angular 2中,有许多替代方案可以在客户端工作(包括AngularCLI、webpack)。 Jwt-decode 例如将解码JWT。

    然而,我发现最好的替代方法是重构代码以使用 Angular2-JWT 是AuthHttp类,它负责在http头中为您传递令牌。如果令牌不存在或未通过验证,它也会抛出错误,您可以随意处理。