Skip to content

Commit

Permalink
✅ 이름, 닉네임 분류
Browse files Browse the repository at this point in the history
  • Loading branch information
tjdals4716 committed Jul 25, 2024
1 parent f7be277 commit e2a9bef
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,23 @@ public ResponseEntity<Long> refreshToken(@AuthenticationPrincipal UserDetails us
return ResponseEntity.ok(remainingTime);
}

//닉네임 수정
@PutMapping("/nickname/{uid}")
public ResponseEntity<UserDTO> updateNickname(@PathVariable String uid, @RequestBody String nickname) {
UserDTO updatedUser = userService.updateNickname(uid, nickname);
return ResponseEntity.ok(updatedUser);
}

//카카오 로그인 성공 시 호출되는 메서드
@GetMapping("/loginSuccess")
public JWTDTO loginSuccess(OAuth2User oAuth2User) {
return userService.loginWithOAuth2(oAuth2User);
}

// 카카오 로그인 유저 정보 조회
@GetMapping("/kakao/{uid}")
public ResponseEntity<UserDTO> getKakaoUserInfo(@PathVariable String uid) {
UserDTO user = userService.getKakaoUserInfo(uid);
return ResponseEntity.ok(user);
}
}
4 changes: 3 additions & 1 deletion src/main/java/com/example/MangoWafflee/DTO/UserDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class UserDTO {
private Long id;
private String uid;
private String password;
private String name;
private String nickname;
private String image;

Expand All @@ -20,13 +21,14 @@ public static UserDTO entityToDto(UserEntity userEntity) {
userEntity.getId(),
userEntity.getUid(),
userEntity.getPassword(),
userEntity.getName(),
userEntity.getNickname(),
userEntity.getImage()
);
}

public UserEntity dtoToEntity() {
return new UserEntity(id, uid, password, nickname, image);
return new UserEntity(id, uid, password, name, nickname, image);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class UserEntity implements UserDetails {
private Long id;
private String uid;
private String password;
private String name;
private String nickname;
private String image;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.authorizeHttpRequests(authorizeRequests ->
authorizeRequests
.requestMatchers("/", "/login**", "/oauth2/**", "/login", "/loginFailure", "/error").permitAll()
.requestMatchers("/user/kakao/**").authenticated() // 카카오 유저 정보 조회 경로 보호
.anyRequest().authenticated()
)
.sessionManagement(sessionManagement ->
Expand All @@ -61,7 +62,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.userInfoEndpoint(userInfoEndpoint ->
userInfoEndpoint.userService(customOAuth2UserService())
)
);
)
.formLogin(formLogin -> formLogin.disable()); // 폼 로그인 비활성화

http.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,21 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) {
Map<String, Object> properties = oAuth2User.getAttribute("properties");
Map<String, Object> kakaoAccount = oAuth2User.getAttribute("kakao_account");

String nickname = properties != null ? (String) properties.get("nickname") : null;
String name = properties != null ? (String) properties.get("nickname") : null;
String email = kakaoAccount != null ? (String) kakaoAccount.get("email") : null;

// 사용자가 이미 존재하는지 확인
Optional<UserEntity> userEntityOptional = userRepository.findByUid(String.valueOf(id));
UserEntity userEntity;
if (userEntityOptional.isPresent()) {
userEntity = userEntityOptional.get();
// 이름 업데이트
userEntity.setName(name);
} else {
// 존재하지 않으면 새로 생성
userEntity = UserEntity.builder()
.uid(String.valueOf(id))
.nickname(nickname)
.name(name)
.password(passwordEncoder.encode("OAuth2_User_Password")) // 비밀번호 설정
.build();
userRepository.save(userEntity);
Expand All @@ -58,5 +60,3 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) {
return new CustomOAuth2User(userEntity, oAuth2User.getAttributes());
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,7 @@ public interface UserService {
void deleteUser(String uid, UserDetails userDetails);
Long refreshToken(UserDetails userDetails);
Long getTokenRemainingTime(UserDetails userDetails);
UserDTO updateNickname(String uid, String nickname);
JWTDTO loginWithOAuth2(OAuth2User oAuth2User);
UserDTO getKakaoUserInfo(String uid);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
Expand Down Expand Up @@ -132,15 +134,51 @@ public Long refreshToken(UserDetails userDetails) {
return jwtTokenProvider.getTokenRemainingTime(token);
}

//닉네임 수정
@Override
public UserDTO updateNickname(String uid, String nickname) {
UserEntity userEntity = userRepository.findByUid(uid)
.orElseThrow(() -> new RuntimeException("유저의 uid가 " + uid + "인 사용자를 찾을 수 없습니다"));

userEntity.setNickname(nickname);

UserEntity updatedUser = userRepository.save(userEntity);
logger.info("사용자 닉네임 업데이트 완료! " + updatedUser);
return UserDTO.entityToDto(updatedUser);
}

//카카오 로그인 성공 시 호출되는 메서드
@Override
public JWTDTO loginWithOAuth2(OAuth2User oAuth2User) {
String uid = oAuth2User.getName();
UserEntity userEntity = userRepository.findByUid(uid)
.orElseThrow(() -> new IllegalArgumentException("입력한 사용자 정보에 대해 카카오에 가입된 사용자를 찾을 수 없습니다"));
String uid = oAuth2User.getAttribute("id").toString();
Map<String, Object> properties = oAuth2User.getAttribute("properties");
String name = properties != null ? (String) properties.get("nickname") : null;

UserEntity userEntity = userRepository.findByUid(uid).orElse(null);

if (userEntity == null) {
userEntity = UserEntity.builder()
.uid(uid)
.name(name)
.password(passwordEncoder.encode("oauth2user"))
.build();
userRepository.save(userEntity);
} else {
userEntity.setName(name);
userRepository.save(userEntity);
}

String token = jwtTokenProvider.generateToken(uid);
logger.info("카카오 로그인 성공! 새로운 토큰이 발급되었습니다");
return new JWTDTO(token, UserDTO.entityToDto(userEntity));
}

// 카카오 로그인 유저 정보 조회
@Override
public UserDTO getKakaoUserInfo(String uid) {
UserEntity userEntity = userRepository.findByUid(uid)
.orElseThrow(() -> new RuntimeException("유저의 uid가 " + uid + "인 사용자를 찾을 수 없습니다"));
return UserDTO.entityToDto(userEntity);
}
}

0 comments on commit e2a9bef

Please sign in to comment.