我已经实现了jwt,它可以正常工作,但是当创建一个中间件来验证令牌是否仍处于活动状态并且有效时,如果令牌已过期,则必须创建一个新的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文档,以了解如何验证令牌并找到它: https://github.com/auth0/node-jsonwebtoken
// verify a token symmetric
jwt.verify(token, 'shhhhh', function(err, decoded) {
console.log(decoded.foo) // bar
});
但是在nestjs中,它不是那样工作的。无法像这样实现“函数(错误,已解码)”功能,因此它标记了我错误,因此我不得不将其放入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文档中说:
默认情况下,Nest中间件等于表示中间件。这是从官方快递文档中复制的大量中间件功能的列表
https://docs.nestjs.com/middleware
我已经尝试过了,但是不起作用
return res.status(401).json({
ok: false,
message: 'Invalid Token',
errors: err
});
欢迎任何帮助,谢谢!
答案 0 :(得分:0)
尝试这个..使用'jsonwebtoken'包
import * as jwt from 'jsonwebtoken';
jwt.verify(token, 'shhhhh', function(err, decoded){
console.log(decoded.foo) // bar
});