我将在我的 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 |
为什么会给我这个错误?
我已经尝试解决这个问题,但还没有结果。
并感谢任何修复它的帮助。谢谢。
我也有同样的问题。问题是 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
在这种情况下,您需要使用最新的node版本,所以请先检查您的node版本,此错误可能会在版本中出现
10.*.*
所以更新你的 Nodejs 版本
在最新的 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 });
我也遇到过这个。到目前为止,没有任何建议对我有用,直到我也进行了此更改以使用 require 语句而不是导入。
const jwt = require('jsonwebtoken');
我遇到了同样的问题,我使用的是节点版本 v10.16.0,我卸载了它并下载了节点版本 v18.16.0。然后效果很好
我在验证模块中遇到了类似的问题,在前端验证问题出在 apikey 上。与后端的apikey不对应