我需要帮助来验证jwt是否有效,或者创建一个新的jwt,如果发送的令牌不正确,则在nestjs中间件中返回一个错误

我需要帮助来验证jwt是否有效,或者创建一个新的jwt,如果发送的令牌不正确,则在nestjs中间件中返回一个错误,jwt,nestjs,Jwt,Nestjs,我已经实现了jwt,它可以正常工作,但是当创建一个中间件来验证令牌是否仍然处于活动状态并且它是有效的时,如果令牌已经过期,您必须创建一个新的令牌。如果您无法创建一个新的令牌,则返回一个404错误和一条消息,到目前为止,我只能获得令牌并对其进行解码,我需要能够验证它并返回错误响应,或者让它继续 这是我的中间件代码: import { JwtService } from '@nestjs/jwt'; import { Injectable, NestMiddleware } from '@nestj

我已经实现了jwt,它可以正常工作,但是当创建一个中间件来验证令牌是否仍然处于活动状态并且它是有效的时,如果令牌已经过期,您必须创建一个新的令牌。如果您无法创建一个新的令牌,则返回一个404错误和一条消息,到目前为止,我只能获得令牌并对其进行解码,我需要能够验证它并返回错误响应,或者让它继续

这是我的中间件代码:

import { JwtService } from '@nestjs/jwt';
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class JwtMiddleware implements NestMiddleware {
    valid = null;
    decode = null;
    cleanToken = null;

    constructor(private readonly jwtServ: JwtService) {}

    use(req: Request, res: Response, next: Function) {
        const token = req.headers['authorization'];
        try {
            this.cleanToken = token.replace('Bearer','').trim();
            this.decode = this.jwtServ.decode(this.cleanToken);            
        } catch (error) {
            // console.log(error);
        }

        try {
            this.valid = this.jwtServ.verify(this.cleanToken);
        } catch (error) {
            console.log(error.name);
            console.log(error.message);
            console.log(error.expiredAt);
        }

        next();
    }
}
到目前为止,我只能在控制台中打印验证jwt的错误,但这不是正确的方法,而且我无法向客户端返回有效的答案

控制台打印:

  • 令牌过期错误
  • jwt过期
  • 2019-03-27T00:18:56.000Z
我搜索了jwt文档以查看如何验证令牌,并找到了它:

但在nestjs中,它不是这样工作的。函数“function(err,decoded)”不能像这样实现,所以它标记了我的错误,所以我不得不把它放在一个trycatch中

我也试过:

this.jwtServ.verify(token,(err, decoded) => {
        if (err) {
            return res.status(401).json({
                ok: false,
                message: 'Invalid Token',
                errors: err
            });
        }

        req.user = decoded.user;

        next();
    });
在nestjs文档中,他说:

默认情况下,嵌套中间件等同于express中间件。下面是从官方express文档中复制的中间件功能的一个很好的列表

我已经试过了,但它不起作用

return res.status(401).json({
                ok: false,
                message: 'Invalid Token',
                errors: err
            });

欢迎任何帮助,谢谢

试试这个。。使用“jsonwebtoken”包

import * as jwt from 'jsonwebtoken';
jwt.verify(token, 'shhhhh', function(err, decoded){
 console.log(decoded.foo) // bar
});

请为您的代码添加一些解释,以便其他人可以从中学习
JwtService
来自
@nestjs/jwt
已在下面使用
jsonwebtoken
import * as jwt from 'jsonwebtoken';
jwt.verify(token, 'shhhhh', function(err, decoded){
 console.log(decoded.foo) // bar
});