Я уже реализовал 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, но это не правильный способ сделать это, кроме того, что я не могу вернуть действительныйответ клиенту
консольная печать:
- TokenExpiredError
- jwt expired
- 2019-03-27T00: 18: 56.000Z
Я искал документацию jwt, чтобы узнать, как проверить токен, и нашел его: https://github.com/auth0/node-jsonwebtoken
// verify a token symmetric
jwt.verify(token, 'shhhhh', function(err, decoded) {
console.log(decoded.foo) // bar
});
, но в 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 он говорит:
Промежуточное ПО Nest по умолчанию равнозначно промежуточному программному обеспечению Express.Вот большой список возможностей промежуточного программного обеспечения, скопированный из официальной экспресс-документации
https://docs.nestjs.com/middleware
Я уже пробовал это, и он не работает
return res.status(401).json({
ok: false,
message: 'Invalid Token',
errors: err
});
Любойпомощь приветствуется, спасибо!