Мне нужна помощь, чтобы проверить, что JWT является действительным или иным образом создать новый, и если отправленный токен не верен, верните ошибку в промежуточном программном обеспечении nestjs - PullRequest
0 голосов
/ 27 марта 2019

Я уже реализовал 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
            });

Любойпомощь приветствуется, спасибо!

...