inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Public Route 정리하기

스웨거 문서에 Basic, Bearer를 적용하는 방법에 대해 질문 드립니다.

281

airedu7269

작성한 질문수 1

1

AccessToken, RefreshToken 강의 내용을 모두 마친 후에 스웨거 문서 작성 방법에 대해 궁금한 점이 있어 질문 드립니다.

 

@Headers()를 사용하여 rawToken 값을 전달하는 경우 스웨거 문서에서는 다음과 같이 @ApiBasicAuth('basic'), @ApiBearerAuth('bearer') 형식을 작성을 해야하는지 질문 드립니다.

 

import { Body, Controller, Headers, Post, UseGuards } from '@nestjs/common';
import { AuthFacade } from '@root/resource/auth/auth.facade';
import { BasicTokenGuard } from '@root/common/guard/basic-token.guard';
import { RefreshTokenGuard } from '@root/common/guard/bearer-token.guard';
import { IsPublic } from '@root/common/decorator/is-public.decorator';
import { ApiBasicAuth, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
import {
    AccessAndRefreshTokenResponse,
    AccessTokenResponse,
    RefreshTokenResponse,
} from '@root/resource/auth/dto/response/token-response.dto';

@ApiTags('Auth API')
@Controller('v1/auth')
export class AuthController {
    constructor(private readonly authFacade: AuthFacade) {}

    @ApiOperation({ summary: '로그인', description: 'Authorization Basic 이메일:비밀번호 방식으로 로그인합니다.' })
    @ApiBasicAuth('basic')
    @ApiOkResponse({ type: AccessAndRefreshTokenResponse })
    @IsPublic()
    @UseGuards(BasicTokenGuard)
    @Post('login')
    async login(@Headers('authorization') rawToken: string) {
        return await this.authFacade.loginWithEmail(rawToken);
    }

    @ApiOperation({ summary: '회원가입', description: '이메일, 비밀번호로 회원가입을 진행합니다.' })
    @ApiOkResponse({ type: AccessAndRefreshTokenResponse })
    @IsPublic()
    @Post('register')
    async register(@Body('email') email: string, @Body('password') password: string) {
        return await this.authFacade.registerWithEmail(email, password);
    }

    @ApiOperation({ summary: 'AccessToken 갱신', description: 'RefreshToken으로 AccessToken을 갱신합니다.' })
    @ApiBearerAuth('bearer')
    @ApiOkResponse({ type: AccessTokenResponse })
    @IsPublic()
    @UseGuards(RefreshTokenGuard)
    @Post('token/access')
    generateAccessToken(@Headers('authorization') rawToken: string) {
        return this.authFacade.generateAccessToken(rawToken);
    }

    @ApiOperation({ summary: 'RefreshToken 갱신', description: 'RefreshToken으로 RefreshToken을 갱신합니다.' })
    @ApiBearerAuth('bearer')
    @ApiOkResponse({ type: RefreshTokenResponse })
    @IsPublic()
    @UseGuards(RefreshTokenGuard)
    @Post('token/refresh')
    generateRefreshToken(@Headers('authorization') rawToken: string) {
        return this.authFacade.generateRefreshToken(rawToken);
    }
}

javascript typescript rest-api nestjs backend

답변 2

0

코드팩토리

안녕하세요!

ApiBasicAuth, ApiBearerAuth를 사용하시는게 맞습니다!

아래 링크를 참고 해주세요!

https://docs.nestjs.com/openapi/security

감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. airedu7269님.

스웨거 문서에 Basic, Bearer를 적용하는 방법에 대한 질문을 주셨습니다. 이와 관련하여 유사한 논의가 진행된 몇 가지 질문과 그에 대한 답변을 참고해 보시기 바랍니다.

  1. auth/token/access, auth/token/refresh 엔드포인트에 대한 Guard 적용

    • 이 질문에서는 BearerTokenGuard와 같은 가드를 적용함에 있어 refreshToken과 관련된 엔드포인트에 대해 다른 가드를 생성할 필요가 있는지에 대해 논의하고 있습니다. 기본 구조와 작동 방식이 어떻게 이루어지는지 참고해 보시면 도움이 될 것입니다.
  2. guard와 controller 토큰 추출 / 디코드 중복 코드 관련 질문

    • 여기서는 Guard를 통해 토큰을 추출하고 디코드하는 부분에 대한 코드를 중복 처리할 때 고려해야 할 사항들에 대해 자세히 설명하고 있습니다.
  3. async와 await 로직을 사용해야 하는 기준을 잘 모르겠어요

    • 비동기 작업에서 asyncawait 로직을 사용해야 하는 기준과 NestJS 컨트롤러 및 서비스에서 그 적용 방법에 대해 설명하고 있습니다.
  4. 토큰 만료에 대한 예외처리 질문

    • 토큰 만료 시 예외 처리를 위한 best practice를 볼 수 있습니다. Guard와 예외 처리를 어떻게 활용할 수 있는지에 대한 힌트를 얻으실 수 있을 것입니다.

각 항목에서 다루고 있는 내용과 질문에 대해 간단히 요약해 드렸습니다. 스웨거 문서에서는 @ApiBasicAuth@ApiBearerAuth 같은 어노테이션을 사용하여 인증 흐름을 명확히 기술할 수 있으며, 이것이 설정된 엔드포인트에서 동작하는 Guard와 연동되어 API 문서를 더 직관적으로 만들 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cascade 질문

0

44

1

@types/bcrypt 설치과정이 누락된것같습니다.

0

52

1

process.env port key 에러

0

51

1

추상화

0

52

1

[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상

0

103

2

where 키워드가 들어가는 메서드와 아닌 메서드

0

57

1

BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?

0

72

1

app.controller app.service 는 지워도되나요?

0

70

1

@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이

0

80

1

포트 3000에서 listen하는 곳까지 넘어가지 않습니다.

0

69

1

PickType 사용 시 `as const`를 꼭 사용해야 하나요?

0

104

2

socket connect 오류

0

100

2

강의를 들으면서 궁금한 점

0

99

2

DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?

0

62

2

커리큘럼 질문

0

101

2

put 요청은 언제

0

92

3

typeorm VS prisma

0

354

2

142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.

0

79

2

User 데코레이터 버그 수정 전달드립니다.

0

69

1

git 주소 부탁드립니다.

0

114

2

nest g resource 명령어 에러

0

99

2

로그인 엔드포인트 관련 질문

0

85

2

yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우

0

150

3

"흔히 사용되는 메서드" 강의 관련 질문입니다~

0

95

2