구현 방법 1
@Injectable()
export class AuthGuard {
async canActivate(context) {
const request = context.switchToHttp().getRequest();
return await validateRequest(request);
}
}
구현 방법 2
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
return validateRequest(request);
}
}
모든 가드는 canActivate()
함수를 구현해야합니다. 이 함수는 현재 요청이 허용되는지 여부를 나타내는 조건값을 반환해야 합니다. 응답을 동기식 또는 비동기식으로 반환 할 수 있습니다 (Promise
또는 Observable
을 통해). Nest는 리턴 값을 사용하여 다음 조치를 제어합니다.
ExecutionContext
는 ArgumentsHost
를 확장하여 현재 실행 프로세스에 대한 추가 정보를 제공적용 방법1 (함수)
@UseGuards(AuthGuard)
@Get('/:userId')
async getUser(@Param('userId') id: number) {
const result = await this.userService.findUser(id);
return ApiResponse.SUCCESS(result);
}
@UseGuard(new AuthGuard())
@Get('/:userId')
async getUser(@Param('userId') id: number) {
const result = await this.userService.findUser(id);
return ApiResponse.SUCCESS(result);
}
적용 방법2 (클래스)
@Controller('cats')
@UseGuards(new RolesGuard())
export class CatsController {}
적용 방법3 (전역 모듈 / main.ts)
const app = await NestFactory.create(AppModule);
app.useGlobalGuards(new RolesGuard());
warning 알림
하이브리드 앱의 경우useGlobalGuards()
메소드는 게이트웨이 및 마이크로 서비스에 대한 보호를 설정하지 않습니다. "표준"(하이브리드가 아닌) 마이크로 서비스 앱의 경우useGlobalGuards()
는 가드를 전역으로 마운트합니다.
적용 방법4 (모듈 / app.module.ts)
@Module({
providers: [
{
provide: APP_GUARD,
useClass: RolesGuard,
},
],
})
export class AppModule {}