250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[NestJS] Controller 단에서 @UseGuards 사용안했는데 Get요청이 401 Unauthorized 해결방법 본문

[Snow-ball]server/NestJS

[NestJS] Controller 단에서 @UseGuards 사용안했는데 Get요청이 401 Unauthorized 해결방법

Snow-ball 2022. 12. 8. 13:00
반응형

최근에 프로젝트가 NestJS로 만들고 있으면서 백단을 구축하고 있다. 하지만, @Get('/')요청으로 Board들의 list 를 불러오기위해 컨트롤러 단에서 @UseGuards를 사용하지 않았는데도 불구하고, Response가 Unauthorized가 발생했다. 

 

물론, 내가 실수를 한부분이 있는지 확인을 했지만 없었다. 혹시 몰라서 @Post로 요청을 해봤더니 정상적으로 동작을 하게 됬다. 이게 뭐지?? 고민을 하고 개선을 해보다가 혹시나 해서 @Get('/)요청을 맨위로 올렸더니 정상적으로 작동이 됬다.

 

그래서 몇가지 테스트를 했더니 @UseGuards가 없는 컨트롤러단은 위에 2개까지 있을때는 @Get 요청을 했을 경우 401 Unauthorized가 발생하지 않았다.

 

결론적으로는, @UseGuards가 없는 컨트롤러들은 제일 상위에 두고 작업하는것이 정신적으로 평화로울 것이다.

그래도 글보다는 짧게 예시를 들어보자. 물론 예시이기 때문에 가독성을 위해서 필요없는 @(어노테이션) 및 코드들은 다 제거했다.

 

 


 

 

Best EX)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Controller('/boards')
export class BoardsController {
 
  @Get('/')
  private async list(){}
 
  @UseGuards(AccessTokenGuard)
  @ApiBearerAuth('access_token')
  @Post('/register')
  private async register() {}
 
  @UseGuards(AccessTokenGuard)
  @ApiBearerAuth('access_token')
  @Delete('/:id')
  private async delete() {}
 
  @UseGuards(AccessTokenGuard)
  @ApiBearerAuth('access_token')
  @Get('/:id')
  private async read() {}
 
  @UseGuards(AccessTokenGuard)
  @ApiBearerAuth('access_token')
  @Patch('/update')
  private async update(){}
}
 
cs

 

 

 

허용되는  EX)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Controller('/boards')
export class BoardsController {
 
  @UseGuards(AccessTokenGuard)
  @ApiBearerAuth('access_token')
  @Post('/register')
  private async register() {}
 
  @UseGuards(AccessTokenGuard)
  @ApiBearerAuth('access_token')
  @Delete('/:id')
  private async delete() {}
 
 
  @Get('/')
  private async list(){}
 
  @UseGuards(AccessTokenGuard)
  @ApiBearerAuth('access_token')
  @Get('/:id')
  private async read() {}
 
  @UseGuards(AccessTokenGuard)
  @ApiBearerAuth('access_token')
  @Patch('/update')
  private async update(){}
}
 
cs

 

 

 

이외에도 다른 방법이 있을 수 있다. 하지만 내가 확인한 방법은 이정도 였다. 사실 이렇게 만든 의도가 있을까? 궁금하기도 하지만, 이런 이슈에는 깊이 들어갈 필요가 없는듯하다. 개인적으로는 NestJS개발자의 의도안된 오류가 아닐까? 싶다..

반응형
Comments