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"],
}
我开始学习 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"],
}