if (!options.algorithms) throw new Error('algorithms should be set'); Error: algorithms should be set

if (!options.algorithms) throw new Error('algorithms should be set'); Error: algorithms should be set

我开始学习 Nodejs,但我被困在中间的某个地方。我从 npm 安装了一个新库,它是 express-jwt,它在 运行 之后显示某种错误。附上代码和错误日志,请帮帮我!

const jwt = require('jsonwebtoken');
require('dotenv').config()
const expressJwt =  require('express-jwt');
const User = require('../models/user');




exports.requireSignin =  expressJwt({ secret:  process.env.JWT_SECRET});

下面是错误日志。

[nodemon] starting `node app.js`
D:\shubh\proj\Nodejs\nodeapi\node_modules\express-jwt\lib\index.js:22
  if (!options.algorithms) throw new Error('algorithms should be set');
                           ^

**Error: algorithms should be set**
    at module.exports (D:\shubh\proj\Nodejs\nodeapi\node_modules\express-jwt\lib\index.js:22:34)
    at Object.<anonymous> (D:\shubh\proj\Nodejs\nodeapi\controllers\auth.js:64:26)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
 

您应该将算法 属性 添加到 jwt 构造函数中。

示例;

expressJwt({ secret:  process.env.JWT_SECRET, algorithms: ['RS256'] });

版本 6.0.0 中 changes 导致的问题。 Documentation最近也更新了,上面写着:

The algorithms parameter is required to prevent potential downgrade attacks when providing third party libraries as secrets.

所以现在指定算法 属性 是强制性的,如下所示:

expressJwt({
  secret: 'secret',
  algorithms: ['HS256']
})

如果您遇到此错误,您可能正在使用新版本的 'express-jwt' 降级到^5.3.3版本解决这个问题

如果上面的算法:['RS256']不工作试试这个,算法:['HS256']

 exports.requireSignin = expressJwt ({
      secret: process.env.JWT_SECRET,
      algorithms: YOU CHOOSE ALGORITHM 
});

更多详情请访问: https://www.npmjs.com/package/express-jwt

jwt({ secret: new Buffer('shhhhhhared-secret', 'base64') })

对于那些徘徊使用什么算法生成令牌的人

一个 JWT 由 3 个部分组成,用点 '.':

分隔
<header>.<payload>.<signature>

header(和有效负载)只是一个 Base64 编码的 JSON object,其中包含哈希算法的名称。

例如,使用该令牌:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXNzYWdlIjoiaGkgc3RhY2tvdmVyZmxvdyJ9.01jBDw7uUgCr8cRMEQt4KJxfL6QLkt0ZuHly2AxdXZY

您可以在浏览器的 javascript 控制台中使用 atob() 来解码 header:

atob('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9')
// → "{\"alg\":\"HS256\",\"typ\":\"JWT\"}"

这里用的是HS256

我不得不面对同样的错误,我在 express-jwt 初始化中提到算法后,错误消失了。

示例代码:

exports.requireSignin=  expressJwt({
      secret: process.env.jwtSecret,
      userProperty: "auth",
      algorithms: ["RS256"],
    }