nodejs express-jwt验证不生效的主要原因之一及其解决方法
2023-10-23
nodejs express-jwt验证token,不生效的主要原因之一:
注册中间件的方式不对,app.use这行注册代码一定要放在其他use之前,至少在注册路由之前。
参考代码:
const express = require('express')
const app = express()
var webRouter = require('./routes/router');
const { jwtAuth, errorToken } = require("./controllers/token");
app.use(jwtAuth());
app.use(errorToken);
app.use(webRouter);
还需要注意,在请求headers中,Authorization格式需要添加一个空格:
const headers = {
'Authorization': 'Bearer ' + sessionKey
};
至于具体验证方式就很常见了,参考:
var { expressjwt: jwt } = require("express-jwt");
const secretKey = 'xxxxxxxxxxxxxx'
exports.jwtAuth = () => {
return jwt({
secret: secretKey,
algorithms: ["HS256"],
credentialsRequired: true// false:不校验
}).unless({
// path: ["/users/login/", "/nrd/validate/"] //不需要校验的路径
path: []
});
}
exports.errorToken = (err, req, res, next) => {
if (err.name === 'UnauthorizedError') {
// 这个需要根据自己的业务逻辑来处理( 具体的err值 请看下面)
let obj = {};
obj.msg = 'token验证失败';
obj.code = '606';
obj.error = err;
res.send(obj); //返回失败信息
}
};
(版权归cpury.com所有,转载请注明出处。)