
구현 방법 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 (클래스)