Как обновить токен в Nestjs - PullRequest
0 голосов
/ 14 ноября 2018
import { ExtractJwt, Strategy } from 'passport-jwt';
import { AuthService } from './auth.service';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { JwtPayload } from './model/jwt-payload.model';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private readonly authService: AuthService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: 'secretKey',
    });
  }

  async validate(payload: JwtPayload) {
    const user = await this.authService.validateUser(payload);
    if (!user) {
      throw new UnauthorizedException();
    }
    return true;
  }
}

Токен извлекается из запроса на PassportStrategy.Я не знаю, как отловить ошибку, когда токен истекает или становится недействительным.Моя цель - если произошла ошибка из-за истечения срока действия токена, мне нужно обновить токен.В противном случае сделай что-нибудь еще.

1 Ответ

0 голосов
/ 14 ноября 2018

Вместо использования встроенного AuthGuard вы можете создать свой собственный и перезаписать обработчик запроса:

@Injectable()
export class MyAuthGuard extends AuthGuard('jwt') {

  handleRequest(err, user, info: Error) {
    if (info instanceof TokenExpiredError) {
      // do stuff when token is expired
      console.log('token expired');
    }
    return user;
  }

}

В зависимости от того, что вы хотите сделать, вы также можете перезаписать canActivateметод, где у вас есть доступ к объекту запроса.Взгляните на AuthGuard исходный код .

...