开发者问题收集

“instanceof”的右侧不是对象,jsonwebtoken

2022-12-24
27157

我将在我的 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 | 

为什么会出现这个错误? 我尝试解决这个问题,但还没有结果。
任何帮助修复它的帮助都将不胜感激。谢谢。

3个回答

我遇到了同样的问题。问题是 jsonwebtoken 包的 9.0.0 版本不支持节点版本 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

92lexus
2023-01-11

jsonwebtoken 是一个 Node 模块。换句话说,它在浏览器上不能很好地工作。请参阅 此处的问题。 此页面 提供了客户端 jwt 操作的良好替代方案。

Alanp
2022-12-24

在这种情况下,您需要使用最新的 Node 版本,因此请首先检查您的 Node 版本,此错误可能出现在版本 10.*.*

因此请更新您的 Nodejs 版本

nikunj bodarya
2023-01-31