Node.js JWT和nodejs在登录后返回无效令牌作为响应

Node.js JWT和nodejs在登录后返回无效令牌作为响应,node.js,angular,express,express-jwt,Node.js,Angular,Express,Express Jwt,我正在使用nodejs/express和expressjwt模块。 这是涉及的服务器代码: async function authenticate({ username, password }) { const user = await User.findOne({ username }); if (user && bcrypt.compareSync(password, user.hash)) { if(user.accountActive =

我正在使用nodejs/express和expressjwt模块。 这是涉及的服务器代码:

async function authenticate({ username, password }) {
    const user = await User.findOne({ username });

    if (user && bcrypt.compareSync(password, user.hash)) {
        if(user.accountActive === true) {
            const {hash, ...userWithoutHash} = user.toObject();
            const token = jwt.sign({sub: user.id}, config.secret, { expiresIn: '1h' });
            console.log(token)
            return {
                ...userWithoutHash, token
            };
        } else {
            throw 'Your account is pending approval.'
        }
    }
}

function jwt() {
    const secret = config.secret;
    return expressJwt({ secret, isRevoked }).unless({
        path: [
            // public routes that don't require authentication
            '/users/authenticate',
            '/users/register',
        ]
    });
}
每当我试图调用应用程序中的任何api时,我都会收到
{message:“Invalid Token”}消息:“Invalid Token”

这是请求头:令牌不会添加到请求头中

如果本地存储上有jwt令牌,我会添加授权头

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    const currentUser = JSON.parse(localStorage.getItem('currentUser'));
    if (currentUser && currentUser.token) {
        request = request.clone({
            setHeaders: {
                Authorization: `Bearer ${currentUser.token}`
            }
        });
    }

        return next.handle(request);
    }
下面是登录后的身份验证登录会话请求示例 它看起来像是jwt令牌,即使它是有效的,但在登录后它将变得无效。 对我来说,这似乎是一个象征性的问题,但我不知道问题到底出在哪里

N.B我终于找到了问题所在,我没有将jwt拦截器添加到我的app.module中 通过将下面的代码添加到提供者,为我修复了它:

{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },
这意味着对于我提供的令牌,将使用多个值(或类)

angular cli:8.3.0 节点:10.16 快递:4.17.1
express jwt:5.3.1

您是否在头中传递授权令牌,格式如下
authorization:Bearer
?如果本地存储中可用,我将使用jwt令牌添加授权头。我更新了上面的问题并添加了拦截器。您是否检查了令牌是否真的添加到了头中?您可以在控制台的“网络”选项卡中进行检查。config.secret值是如何设置的?您还可以在vscode中附加一个调试器,以便逐行调试代码。@NS23在config.json上有两个字符串,即连接字符串和密码{“connectionString”:“server**”,“secret”:“sharedddd secret”}
{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },