[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개발자의 의도안된 오류가 아닐까? 싶다..
반응형