nodejs express-jwt验证不生效的主要原因之一及其解决方法

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所有,转载请注明出处。)