Skip to content

Commit d96042e

Browse files
committed
#235 feat: 카카오 로그인 DB 저장
1 parent b9084d7 commit d96042e

File tree

7 files changed

+99
-4
lines changed

7 files changed

+99
-4
lines changed

src/main/java/com/drinkeg/drinkeg/config/SecurityConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class SecurityConfig {
4242
public WebSecurityCustomizer webSecurityCustomizer() {
4343
return web -> {
4444
web.ignoring()
45-
.requestMatchers("/join","/login/apple/**",
45+
.requestMatchers("/join","/login/apple/**","/login/kakao/**",
4646
"/api-docs/**", "/swagger-ui/**", "/swagger-ui.html/**", "/v3/api-docs/**", "/swagger-ui/index.html#/**");// 필터를 타면 안되는 경로
4747
};
4848
}
@@ -118,7 +118,7 @@ public CorsConfiguration getCorsConfiguration(HttpServletRequest request) {
118118
.authorizeHttpRequests((authorize) -> authorize
119119
//.requestMatchers("/my").authenticated()
120120
.requestMatchers("/api-docs/**", "/swagger-ui/**", "/swagger-ui.html/**", "/v3/api-docs/**", "/swagger-ui/index.html#/**").permitAll()
121-
.requestMatchers("/", "/join", "/login", "/reissue","/login/apple").permitAll()
121+
.requestMatchers("/", "/join", "/login", "/reissue","/login/apple","/login/kakao").permitAll()
122122

123123
// home 인가
124124
.requestMatchers(HttpMethod.GET,"/home").hasRole("USER")

src/main/java/com/drinkeg/drinkeg/member/converter/MemberConverter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ public Member toAppleMember(String username, Map<String, Object> claims) {
2020
.isFirst(true)
2121
.build();
2222
}
23+
24+
public Member toKakaoMember(String kakaoname, String email ) {
25+
return Member.builder()
26+
.username(kakaoname)
27+
.email(email)
28+
.role("ROLE_USER")
29+
.isFirst(true)
30+
.build();
31+
}
2332

2433
public static MemberBasicInfoResponseDTO toMemberBasicInfoResponseDTO(Member member) {
2534
return MemberBasicInfoResponseDTO.builder()

src/main/java/com/drinkeg/drinkeg/member/login/oauth2/apple/sevice/AppleLoginService.java renamed to src/main/java/com/drinkeg/drinkeg/member/login/oauth2/apple/appleService/AppleLoginService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.drinkeg.drinkeg.member.login.oauth2.apple.sevice;
1+
package com.drinkeg.drinkeg.member.login.oauth2.apple.appleService;
22

33
import com.drinkeg.drinkeg.apipayLoad.code.status.ErrorStatus;
44
import com.drinkeg.drinkeg.member.converter.MemberConverter;

src/main/java/com/drinkeg/drinkeg/member/login/oauth2/controller/OAuth2Controller.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.drinkeg.drinkeg.member.login.oauth2.controller;
22

33
import com.drinkeg.drinkeg.apipayLoad.ApiResponse;
4-
import com.drinkeg.drinkeg.member.login.oauth2.apple.sevice.AppleLoginService;
4+
import com.drinkeg.drinkeg.member.login.oauth2.apple.appleService.AppleLoginService;
55
import com.drinkeg.drinkeg.member.login.oauth2.apple.AppleLoginDTO.AppleLoginRequestDTO;
66
import com.drinkeg.drinkeg.member.login.oauth2.dto.LoginResponseDTO;
7+
import com.drinkeg.drinkeg.member.login.oauth2.kakao.kakaoLoginDTO.KakaoLoginRequestDTO;
8+
import com.drinkeg.drinkeg.member.login.oauth2.kakao.kakaoService.KakaoLoginService;
79
import io.swagger.v3.oas.annotations.Operation;
810
import io.swagger.v3.oas.annotations.tags.Tag;
911
import jakarta.servlet.http.HttpServletResponse;
@@ -18,6 +20,8 @@
1820
public class OAuth2Controller {
1921

2022
private final AppleLoginService appleLoginService;
23+
private final KakaoLoginService kakaoLoginService;
24+
2125
@PostMapping("/login/apple")
2226
@Operation(summary = "애플로그인", description = "클라이언트에게 Identity Token을 전달 받아 유저 정보를 저장합니다.")
2327
public ApiResponse<LoginResponseDTO> appleLogin(@RequestBody AppleLoginRequestDTO appleLoginRequestDTO, HttpServletResponse response) throws Exception{
@@ -27,4 +31,15 @@ public ApiResponse<LoginResponseDTO> appleLogin(@RequestBody AppleLoginRequestDT
2731
return ApiResponse.onSuccess(loginResponseDTO);
2832
}
2933

34+
@PostMapping("/login/kakao")
35+
@Operation(summary = "카카오로그인", description = "클라이언트에게 카카오 유저 정보를 전달 받아 저장합니다.")
36+
public ApiResponse<LoginResponseDTO> appleLogin(@RequestBody KakaoLoginRequestDTO kakaoLoginRequestDTO, HttpServletResponse response) throws Exception{
37+
38+
System.out.println("=========start kakao login controller============");
39+
40+
LoginResponseDTO loginResponseDTO = kakaoLoginService.kakaoLogin(kakaoLoginRequestDTO);
41+
return ApiResponse.onSuccess(loginResponseDTO);
42+
}
43+
44+
3045
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.drinkeg.drinkeg.member.login.oauth2.kakao.kakaoLoginDTO;
2+
3+
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.validation.constraints.NotEmpty;
6+
import lombok.AccessLevel;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
10+
@Getter
11+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
12+
public class KakaoLoginRequestDTO {
13+
14+
@NotEmpty
15+
private String kakaoName;
16+
17+
@NotEmpty
18+
private String kakaoEmail;
19+
}
20+
21+
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.drinkeg.drinkeg.member.login.oauth2.kakao.kakaoService;
2+
3+
4+
import com.drinkeg.drinkeg.apipayLoad.code.status.ErrorStatus;
5+
import com.drinkeg.drinkeg.exception.GeneralException;
6+
import com.drinkeg.drinkeg.member.converter.MemberConverter;
7+
import com.drinkeg.drinkeg.member.domain.Member;
8+
import com.drinkeg.drinkeg.member.login.oauth2.dto.LoginResponseDTO;
9+
import com.drinkeg.drinkeg.member.login.oauth2.kakao.kakaoLoginDTO.KakaoLoginRequestDTO;
10+
import com.drinkeg.drinkeg.member.repostitory.MemberRepository;
11+
import jakarta.servlet.http.HttpServletResponse;
12+
import lombok.RequiredArgsConstructor;
13+
import org.springframework.stereotype.Service;
14+
15+
@Service
16+
@RequiredArgsConstructor
17+
public class KakaoLoginService {
18+
19+
private final MemberRepository memberRepository;
20+
private final MemberConverter memberConverter;
21+
22+
public LoginResponseDTO kakaoLogin(KakaoLoginRequestDTO kakaoLoginRequestDTO){
23+
24+
String kakaoname = kakaoLoginRequestDTO.getKakaoName();
25+
String kakaoEmail = kakaoLoginRequestDTO.getKakaoEmail();
26+
27+
if(memberRepository.existsByEmail(kakaoEmail)){
28+
throw new GeneralException(ErrorStatus.MEMBER_ALREADY_EXIST);
29+
}
30+
31+
Member member = memberConverter.toKakaoMember(kakaoname,kakaoEmail);
32+
33+
memberRepository.save(member);
34+
35+
return buildLoginResponseDTO(member);
36+
37+
}
38+
39+
private LoginResponseDTO buildLoginResponseDTO(Member member) {
40+
return LoginResponseDTO.builder()
41+
.username(member.getUsername())
42+
.role(member.getRole())
43+
.isFirst(member.getIsFirst())
44+
.build();
45+
46+
}
47+
48+
}

src/main/java/com/drinkeg/drinkeg/member/repostitory/MemberRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ public interface MemberRepository extends JpaRepository<Member, Long>{
1010
Optional<Member> findByUsername(String username);
1111

1212
Boolean existsByUsername(String username);
13+
14+
Boolean existsByEmail(String email);
1315
}

0 commit comments

Comments
 (0)