JwtAuthGuard where I verify token from headers:
import { JwtService } from '@nestjs/jwt';
import {
CanActivate,
ExecutionContext,
UnauthorizedException
} from '@nestjs/common';
import { Observable } from 'rxjs';
export class JwtAuthGuard implements CanActivate {
constructor(private jwtService: JwtService) {}
canActivate(
context: ExecutionContext
): boolean | Promise<boolean> | Observable<boolean> {
const req = context.switchToHttp().getRequest();
try {
const authHeader = req.headers.authorization;
const token = authHeader.split(' ')[1];
const user = this.jwtService.verify(token);
req.user = user;
return true;
} catch (error) {
console.log(error);
throw new UnauthorizedException();
}
}
}
My controller:
import { Controller, Get, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard';
@Controller('api/messages')
export class MessagesController {
@UseGuards(JwtAuthGuard)
@Get()
getAllUserMessages() {
return "it's work";
}
}
AuthModule where I registered JWT:
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { UsersModule } from 'src/users/users.module';
import { JwtModule } from '@nestjs/jwt';
import { ConfigService } from '@nestjs/config';
@Module({
providers: [AuthService],
controllers: [AuthController],
imports: [
UsersModule,
JwtModule.registerAsync({
useFactory: async (configService: ConfigService) => ({
secret: configService.get('AUTH_KEY'),
signOptions: {
expiresIn: '12h'
}
}),
inject: [ConfigService]
})
],
exports: [JwtModule, AuthService]
})
export class AuthModule {}
When I go to route /api/messages with token, I get error:
TypeError: Cannot read property 'verify' of undefined
at JwtAuthGuard.canActivate (/Users/alexander/Projects/nest/paska/dist/auth/jwt-auth.guard.js:18:42)