Na resposta dada como correta, a variável token passada como argumento para o jwtService.verifyAsync não existe, o que geraria em um erro.
Código da resposta:
async canActivate(contexto: ExecutionContext): boolean {
const requisicao = contexto.switchToHttp().getRequest();
try {
const payload: UsuarioPayload = await this.jwtService.verifyAsync(token);
requisicao.usuario = payload;
} catch (error) {
throw new UnauthorizedException('JWT inválido');
}
return true;
}
Acho que o correto seria:
async canActivate(contexto: ExecutionContext): boolean {
const requisicao = contexto.switchToHttp().getRequest();
const token = this.extrairTokenDoCabecalho(requisicao);
if (!token) {
throw new UnauthorizedException('Erro de autenticação');
}
try {
const payload: UsuarioPayload = await this.jwtService.verifyAsync(token);
requisicao.usuario = payload;
} catch (error) {
throw new UnauthorizedException('JWT inválido');
}
return true;
}