Skip to content

Commit

Permalink
[#21] MemberController: login 메소드 수정
Browse files Browse the repository at this point in the history
1.MemberController: login 메소드 수정
2.MemberService: googleLoginSignup 메소드 수정
3.LoginResponseDTO 구현
  • Loading branch information
chaiminwoo0223 committed Jun 2, 2024
1 parent 629647c commit 0a2a2b3
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 7 deletions.
9 changes: 5 additions & 4 deletions src/main/java/skhu/jijijig/controller/MemberController.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import skhu.jijijig.domain.dto.ErrorResponseDTO;
import skhu.jijijig.domain.dto.LoginResponseDTO;
import skhu.jijijig.domain.dto.TokenDTO;
import skhu.jijijig.service.MemberService;

Expand Down Expand Up @@ -54,17 +55,17 @@ public void callback(@RequestParam("code") String code, HttpServletResponse resp
response.sendRedirect(callbackUrl + code);
}

@Operation(summary = "로그인", description = "Google OAuth 인증 코드를 사용하여, 사용자 로그인을 처리하고 토큰을 반환합니다.")
@Operation(summary = "로그인", description = "Google OAuth 인증 코드를 사용하여, 사용자 로그인을 처리하고 토큰과 사용자 정보를 반환합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "로그인 성공"),
@ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content(schema = @Schema(implementation = ErrorResponseDTO.class))),
@ApiResponse(responseCode = "401", description = "인증 실패", content = @Content(schema = @Schema(implementation = ErrorResponseDTO.class))),
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content(schema = @Schema(implementation = ErrorResponseDTO.class)))
})
@PostMapping("/login")
public ResponseEntity<TokenDTO> login(@RequestParam("code") String code) {
TokenDTO tokens = memberService.googleLoginSignup(code);
return ResponseEntity.ok(tokens);
public ResponseEntity<LoginResponseDTO> login(@RequestParam("code") String code) {
LoginResponseDTO response = memberService.googleLoginSignup(code);
return ResponseEntity.ok(response);
}

@Operation(summary = "리프레시", description = "리프레시 토큰을 사용하여, 액세스 토큰을 갱신합니다.")
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/skhu/jijijig/domain/dto/LoginResponseDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package skhu.jijijig.domain.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class LoginResponseDTO {
@Schema(description = "토큰 정보")
private TokenDTO tokens;

@Schema(description = "사용자 정보")
private MemberDTO memberDTO;
}
7 changes: 4 additions & 3 deletions src/main/java/skhu/jijijig/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import skhu.jijijig.domain.dto.LoginResponseDTO;
import skhu.jijijig.domain.dto.MemberDTO;
import skhu.jijijig.domain.dto.TokenDTO;
import skhu.jijijig.domain.Member;
Expand Down Expand Up @@ -53,7 +54,6 @@ public String getGoogleTokens(String code) throws RestClientException {
params.add("client_id", googleClientId);
params.add("client_secret", googleClientSecret);
params.add("redirect_uri", googleRedirectUri);
// System.out.println(googleRedirectUri);
params.add("grant_type", "authorization_code");
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
ResponseEntity<String> response = restTemplate.postForEntity(googleTokenUri, request, String.class);
Expand Down Expand Up @@ -87,12 +87,13 @@ public MemberDTO getMemberDTO(String accessToken) {
}
}

public TokenDTO googleLoginSignup(String code) {
public LoginResponseDTO googleLoginSignup(String code) {
String accessToken = getGoogleTokens(code);
MemberDTO memberDTO = getMemberDTO(accessToken);
Member member = memberRepository.findByEmail(memberDTO.getEmail())
.orElseGet(() -> memberRepository.save(Member.fromDTO(memberDTO)));
return tokenProvider.createTokens(member);
TokenDTO tokens = tokenProvider.createTokens(member);
return new LoginResponseDTO(tokens, memberDTO);
}

public TokenDTO refreshAccessToken(String refreshToken) {
Expand Down

0 comments on commit 0a2a2b3

Please sign in to comment.