'instanceof'的右侧不是一个对象,jsonwebtoken

问题描述 投票:0回答:8

我将在我的 React 项目中使用

jsonwebtoken
创建表单数据的令牌。

import jwt from 'jsonwebtoken';

const MyForm = () => {
    const submitForm = (e) => {
       e.preventDefault();
       const data = { name: 'name', email: 'email', subject: 'subject', message: 'message' };
       const token = jwt.sign(data, 'qwerty');
       console.log(token);
    }
    return(
        <form onSubmit={submitForm}>
            ...
        </form>
    );
}
export default MyForm;

出现以下错误。

TypeError: Right-hand side of 'instanceof' is not an object
push../node_modules/jsonwebtoken/sign.js.module.exports [as sign]
../node_modules/jsonwebtoken/sign.js:108
  105 |   return failure(new Error('secretOrPrivateKey must have a value'));
  106 | }
  107 | 
> 108 | if (secretOrPrivateKey != null && !(secretOrPrivateKey instanceof KeyObject)) {
      | ^  109 |   try {
  110 |     secretOrPrivateKey = createPrivateKey(secretOrPrivateKey)
  111 |   } catch (_) {
View compiled
submitEmail
../MyForm.js:22
  19 |    e.preventDefault();
  20 |    
  21 |    const data = { name: 'name', email: 'email', subject: 'subject', message: 'message' };
> 22 |    const token = jwt.sign(data, 'qwerty');
     | ^  23 |    console.log(token)
  24 | 
  25 | 

为什么会给我这个错误? 我已经尝试解决这个问题,但还没有结果。
并感谢任何修复它的帮助。谢谢。

javascript reactjs jwt
8个回答
33
投票

我也有同样的问题。问题是 9.0.0 版本的 jsonwebtoken 包不支持 Node 11 及以下版本,所以我通过降级 jsonwebtoken 包的版本解决了这个问题。

我通过将 package.json 文件内的 jsonwebtoken 依赖项从 9.0.0 更改为 8.5.1 来实现此目的,然后在终端内运行 npm update

这里可能建议升级你的节点版本,但由于 npm 问题,我还没有完全更新我的节点版本,所以这只是一个解决方法。

查看以下文章,解释 jsonwebtoken 包从 v8 迁移到 v9。 https://github.com/auth0/node-jsonwebtoken/wiki/Migration-Notes:-v8-to-v9


1
投票

jsonwebtoken
是一个节点模块。换句话说,它在浏览器上运行得不太好。请参阅此处 issue。 此页面 为客户端 jwt 操作提供了很好的替代方案。


1
投票

在这种情况下,您需要使用最新的node版本,所以请先检查您的node版本,此错误可能会在版本中出现

10.*.*

所以更新你的 Nodejs 版本


0
投票

在最新的 jsonwebtoken v9 中: 可能想尝试...

let secret = 'qwerty';
const token = jwt.sign(data, secret.toString('utf-8'));

此外,您可能需要添加参数来强制旧行为......

const token = jwt.sign(data, secret.toString('utf-8'), { algorithm: 'HS256', allowInsecureKeySizes: true, allowInvalidAsymmetricKeyTypes: true });

0
投票

我也遇到过这个。到目前为止,没有任何建议对我有用,直到我也进行了此更改以使用 require 语句而不是导入。

const jwt = require('jsonwebtoken');

0
投票

您也可以使用以下包。我在 nextjs 中使用了它。工作起来就像一个魅力。我确信它也适用于 React。

套餐 - 何塞

这个堆栈溢出answer以及提到的示例here帮助我了解了如何使用该包。


-1
投票

我遇到了同样的问题,我使用的是节点版本 v10.16.0,我卸载了它并下载了节点版本 v18.16.0。然后效果很好


-1
投票

我在验证模块中遇到了类似的问题,在前端验证问题出在 apikey 上。与后端的apikey不对应

© www.soinside.com 2019 - 2024. All rights reserved.