Node Express JWT无效令牌

时间:2019-12-30 23:51:04

标签: node.js express jwt-auth express-jwt

在本地工作,但是在运行prod build时,出现401错误。不知道我错过了什么。每当我尝试对应用程序内的任何api进行调用时,我都会收到{消息:“无效令牌”}消息:“无效令牌”。 Server.js

const express = require('express');
const app = express();
const cors = require('cors');
const bodyParser = require('body-parser');
const jwt = require('./_helpers/Jwt');
const errorHandler = require('_helpers/Error-handler');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cors());

// use JWT auth to secure the api
app.use(jwt());

// api routes
app.use('/users', require('./users'));

// global error handler
app.use(errorHandler);

// start server
const port = process.env.NODE_ENV === 'production' ? (process.env.PORT || 80) : 4000;
if (process.env.NODE_ENV === 'production') {
    app.use(express.static('../portal/dist'));
    app.get('*', (req, res) => {
        res.sendFile(path.join(__dirname, 'portal', 'dist', 'index.html'))
    })
}
const server = app.listen(port, function () {
    console.log('Server listening on port ' + port);
});

JWT.js

const expressJwt = require('express-jwt');
const config = require('../config.json');
const userService = require('../users/user.service');

module.exports = jwt;

function jwt() {
    const secret = app.set('JWT_TOKEN', (process.env.JWT_TOKEN))    ;
    return expressJwt({ secretL  }).unless({
        path: [
            // public routes that don't require authentication
            '/users/authenticate',
            '/users/register'
        ]
    });
}

async function isRevoked(req, payload, done) {
    const user = await userService.getById(payload.sub);

    // revoke token if user no longer exists
    if (!user) {
        return done(null, true);
    }

    done();
};

错误处理程序.js

module.exports = errorHandler;

function errorHandler(err, req, res, next) {
    if (typeof (err) === 'string') {
        // custom application error
        return res.status(400).json({ message: err });
    }

    if (err.name === 'ValidationError') {
        // mongoose validation error
        return res.status(400).json({ message: err.message });
    }

    if (err.name === 'UnauthorizedError') {
        // jwt authentication error
        return res.status(401).json({ message: 'Invalid Token' });
    }

    // default to 500 server error
    return res.status(500).json({ message: err.message });
}

将拦截器添加到了app模块中。不确定我是否缺少某些东西。

1 个答案:

答案 0 :(得分:0)

您需要向 jwt 实例提供 isRevoked

return expressJwt({ secret, isRevoked })