24.10.02 22:28 작성
·
148
0
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);
}
}
답변 2
0
2024. 10. 05. 16:30
안녕하세요!
ApiBasicAuth, ApiBearerAuth를 사용하시는게 맞습니다!
아래 링크를 참고 해주세요!
https://docs.nestjs.com/openapi/security
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. airedu7269님.
스웨거 문서에 Basic, Bearer를 적용하는 방법에 대한 질문을 주셨습니다. 이와 관련하여 유사한 논의가 진행된 몇 가지 질문과 그에 대한 답변을 참고해 보시기 바랍니다.
auth/token/access, auth/token/refresh 엔드포인트에 대한 Guard 적용
BearerTokenGuard
와 같은 가드를 적용함에 있어 refreshToken과 관련된 엔드포인트에 대해 다른 가드를 생성할 필요가 있는지에 대해 논의하고 있습니다. 기본 구조와 작동 방식이 어떻게 이루어지는지 참고해 보시면 도움이 될 것입니다.guard와 controller 토큰 추출 / 디코드 중복 코드 관련 질문
async와 await 로직을 사용해야 하는 기준을 잘 모르겠어요
async
와 await
로직을 사용해야 하는 기준과 NestJS 컨트롤러 및 서비스에서 그 적용 방법에 대해 설명하고 있습니다.각 항목에서 다루고 있는 내용과 질문에 대해 간단히 요약해 드렸습니다. 스웨거 문서에서는 @ApiBasicAuth
와 @ApiBearerAuth
같은 어노테이션을 사용하여 인증 흐름을 명확히 기술할 수 있으며, 이것이 설정된 엔드포인트에서 동작하는 Guard와 연동되어 API 문서를 더 직관적으로 만들 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.