类型错误:jwt.sign 不是函数

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

我包括快递等包括:

var expressJwt = require('express-jwt'); //https://npmjs.org/package/express-jwt
var secret = 'this is the secret secret secret 12356';
var jwt = require('jsonwebtoken');  //https://npmjs.org/package/node-jsonwebtoken

然后定义我的续集模型和尾声路线并将其放在这里:

app.post('/authenticate', function (req, res) {
  //TODO validate req.body.username and req.body.password
  //if is invalid, return 401
  if (!(req.body.username === 'john.doe' && req.body.password === 'foobar')) {
    res.status(401).send('Wrong user or password');
    return;
  }

  var profile = {
    first_name: 'John',
    last_name: 'Doe',
    email: '[email protected]',
    id: 123
  };

  // We are sending the profile inside the token
  var token = jwt.sign(profile, secret, { expiresInMinutes: 60*5 });

  res.json({ token: token });
});

当我在表单中输入 john.doe 和 foobar 时,控制台告诉我 jwt.sign 不是一个函数,即使在 npm 安装之后也是如此。

javascript node.js jwt
2个回答
5
投票

jsonwebtoken 仅用于验证/解码express.js 上的 jwts 请求

如果您需要签署请求,则需要使用node-jsonwebtoken:

https://github.com/auth0/node-jsonwebtoken

GH问题:

https://github.com/auth0/express-jwt/issues/48

这是一篇关于您正在尝试做的事情的不错的博文:

https://matoski.com/article/jwt-express-node-mongoose/


0
投票

实际上,使用 jsonwebtoken 库绝对可以签署 JWT,这是它的主要功能之一。

jsonwebtoken(通常称为 node-jsonwebtoken)是专门为 Node.js 应用程序(包括 Express.js)中的 JWT 签名和验证而设计的库。

根据jsonwebtoken的GitHub仓库上的官方文档:jsonwebtoken GitHub

jwt.sign(有效负载,secretOrPrivateKey,[选项,回调])

此方法对 JWT 进行签名,通过对有效负载进行编码来创建令牌,应用指定的算法(例如 HS256、RS256),并使用提供的秘密或私钥对其进行签名。

以下是文档中的基本用法:

const jwt = require('jsonwebtoken');

const 负载 = { userId: 123 }; const Secret = 'your_secret_key'; // 对于 HS256 算法

const token = jwt.sign(payload, Secret, { expiresIn: '1h' }); // 签署令牌 控制台.log(令牌);

const jwt = require('jsonwebtoken');
const payload = { userId: 123 };
const secret = 'your_secret_key';  // For HS256 algorithm
const token = jwt.sign(payload, secret, { expiresIn: '1h' });  // Signing the token
console.log(token);

我在使用 ES6 时遇到了类似的问题,但是当我这样做时就解决了

`import jwt from 'jsonwebtoken';`

谢谢

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