Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/main/java/umc/codeplay/controller/AuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

import lombok.RequiredArgsConstructor;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import umc.codeplay.apiPayLoad.ApiResponse;
import umc.codeplay.apiPayLoad.code.status.ErrorStatus;
import umc.codeplay.apiPayLoad.exception.handler.GeneralHandler;
Expand All @@ -32,6 +34,7 @@
@RequestMapping("/auth")
@RequiredArgsConstructor
@Validated
@Tag(name = "auth-controller", description = "인증 관련 처리 API, 전부 JWT 토큰 헤더 포함을 필요로 하지 않습니다.")
public class AuthController {

private final AuthenticationManager authenticationManager;
Expand All @@ -40,6 +43,9 @@ public class AuthController {
private final EmailService emailService;

@PostMapping("/login")
@Operation(
summary = "이메일/비밀번호를 사용해 로그인합니다.",
description = "JWT 토큰/리프레시 토큰을 반환합니다. 소셜 로그인 계정으로 로그인 안됩니다.")
public ApiResponse<MemberResponseDTO.LoginResultDTO> login(
@Validated @RequestBody MemberRequestDTO.LoginDto request) {
if (memberService.getSocialStatus(request.getEmail()) != SocialStatus.NONE) {
Expand Down Expand Up @@ -69,6 +75,9 @@ public ApiResponse<MemberResponseDTO.LoginResultDTO> login(
}

@PostMapping("/signup")
@Operation(
summary = "이메일/비밀번호를 사용해 회원가입합니다.",
description = "JWT 토큰을 반환해 주지 않습니다. 로그인 API 를 사용해주세요.")
public ApiResponse<MemberResponseDTO.JoinResultDTO> join(
@Validated @RequestBody MemberRequestDTO.JoinDto request) {
Member member = memberService.joinMember(request);
Expand All @@ -78,6 +87,9 @@ public ApiResponse<MemberResponseDTO.JoinResultDTO> join(
}

@PostMapping("/refresh")
@Operation(
summary = "리프레시 토큰을 사용해 액세스 토큰을 갱신합니다.",
description = "Refresh-Token 헤더를 사용해야 합니다. 리프레시 토큰 유효기간은 24시간이며, 만료 시 재로그인 해야 합니다.")
public ApiResponse<MemberResponseDTO.LoginResultDTO> refresh(
@RequestHeader("Refresh-Token") @NotNull(message = "리프레시 토큰은 필수 헤더입니다.") String refreshToken,
@Validated @RequestParam("email") @NotBlank(message = "이메일은 필수 입력값입니다.") String email) {
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/umc/codeplay/controller/OAuthController.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import lombok.RequiredArgsConstructor;

import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import umc.codeplay.apiPayLoad.ApiResponse;
import umc.codeplay.apiPayLoad.code.status.ErrorStatus;
import umc.codeplay.apiPayLoad.exception.handler.GeneralHandler;
Expand All @@ -31,6 +33,7 @@
@RequestMapping("/oauth")
@RequiredArgsConstructor
@Validated
@Tag(name = "oauth-controller", description = "외부 소셜 로그인 서비스 연동 API, JWT 토큰 헤더 포함을 필요로 하지 않습니다.")
public class OAuthController {

private final JwtUtil jwtUtil;
Expand All @@ -40,6 +43,10 @@ public class OAuthController {
private final MemberService memberService;

@GetMapping("/authorize/{provider}")
@Operation(
summary = "소셜 로그인 서비스로 로그인합니다.",
description =
"{provider}엔 google, kakao 가 들어갈 수 있습니다. 해당 소셜 로그인 서비스로 리다이렉트합니다. 로그인이 완료되면 스프링 서버에서 사용 가능한 JWT 토큰/리프레시 토큰을 반환합니다.")
public RedirectView redirectToOAuth(@PathVariable("provider") String provider) {
// CSRF 방어용 state, PKCE(code_challenge)..는 굳이
BaseOAuthProperties properties =
Expand Down
Loading