From 7a18e921e89fd3c2e5525f0c3c3627934911084c Mon Sep 17 00:00:00 2001 From: jeehdev Date: Thu, 21 Nov 2024 03:05:18 +0900 Subject: [PATCH] =?UTF-8?q?test=20:=20=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8?= =?UTF-8?q?=20=EC=9E=AC=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/SecurityConfig.java | 2 +- .../user/controller/PasswordController.java | 25 +++++++++++++++++++ .../coach_coach_server/user/domain/User.java | 4 +++ .../user/dto/ResetPasswordRequest.java | 14 +++++++++++ .../user/service/UserService.java | 15 +++++++++++ 5 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/main/java/site/coach_coach/coach_coach_server/user/controller/PasswordController.java create mode 100644 src/main/java/site/coach_coach/coach_coach_server/user/dto/ResetPasswordRequest.java diff --git a/src/main/java/site/coach_coach/coach_coach_server/config/SecurityConfig.java b/src/main/java/site/coach_coach/coach_coach_server/config/SecurityConfig.java index 9e4c669e..c23f3e29 100644 --- a/src/main/java/site/coach_coach/coach_coach_server/config/SecurityConfig.java +++ b/src/main/java/site/coach_coach/coach_coach_server/config/SecurityConfig.java @@ -50,7 +50,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti authorizeRequests .requestMatchers("/api/v1/auth/login", "/api/v1/auth/signup", "/api/v1/test", "/api/v1/auth/check-email", "/api/v1/auth/check-nickname", "/api/v1/auth/reissue", - "/api/v1/auth", "/oauth2/", "/login/oauth2/").permitAll() + "/api/v1/auth", "/oauth2/", "/login/oauth2/", "/users/reset-password").permitAll() .anyRequest() .authenticated() ) diff --git a/src/main/java/site/coach_coach/coach_coach_server/user/controller/PasswordController.java b/src/main/java/site/coach_coach/coach_coach_server/user/controller/PasswordController.java new file mode 100644 index 00000000..3653272a --- /dev/null +++ b/src/main/java/site/coach_coach/coach_coach_server/user/controller/PasswordController.java @@ -0,0 +1,25 @@ +package site.coach_coach.coach_coach_server.user.controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import lombok.RequiredArgsConstructor; +import site.coach_coach.coach_coach_server.user.dto.ResetPasswordRequest; +import site.coach_coach.coach_coach_server.user.service.UserService; + +@RestController +@RequestMapping("/users") +@RequiredArgsConstructor +public class PasswordController { + + private final UserService userService; + + @PatchMapping("/reset-password") + public ResponseEntity resetPassword(@RequestBody ResetPasswordRequest request) { + userService.resetPassword(request.getEmail(), request.getPassword()); + return ResponseEntity.noContent().build(); + } +} diff --git a/src/main/java/site/coach_coach/coach_coach_server/user/domain/User.java b/src/main/java/site/coach_coach/coach_coach_server/user/domain/User.java index 4067b8e2..a90a128c 100644 --- a/src/main/java/site/coach_coach/coach_coach_server/user/domain/User.java +++ b/src/main/java/site/coach_coach/coach_coach_server/user/domain/User.java @@ -121,4 +121,8 @@ public void signUpOAuth2(String nickname, String email, String username) { public void promoteToCoach() { this.isCoach = true; } + + public void updatePassword(String encodedPassword) { + this.password = encodedPassword; + } } diff --git a/src/main/java/site/coach_coach/coach_coach_server/user/dto/ResetPasswordRequest.java b/src/main/java/site/coach_coach/coach_coach_server/user/dto/ResetPasswordRequest.java new file mode 100644 index 00000000..89f607ce --- /dev/null +++ b/src/main/java/site/coach_coach/coach_coach_server/user/dto/ResetPasswordRequest.java @@ -0,0 +1,14 @@ +package site.coach_coach.coach_coach_server.user.dto; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ResetPasswordRequest { + private String email; + private String password; +} diff --git a/src/main/java/site/coach_coach/coach_coach_server/user/service/UserService.java b/src/main/java/site/coach_coach/coach_coach_server/user/service/UserService.java index 171ab0d3..8ef6305b 100644 --- a/src/main/java/site/coach_coach/coach_coach_server/user/service/UserService.java +++ b/src/main/java/site/coach_coach/coach_coach_server/user/service/UserService.java @@ -206,4 +206,19 @@ private User buildUserForSignUp(SignUpRequest signUpRequest) { .isSocial(false) .build(); } + + @Transactional + public void resetPassword(String email, String newPassword) { + // 이메일로 사용자 조회 + User user = userRepository.findByEmail(email).orElseThrow(UserNotFoundException::new); + + // 새 비밀번호 암호화 + String encodedPassword = passwordEncoder.encode(newPassword); + + // 비밀번호 업데이트 + user.updatePassword(encodedPassword); + + // 저장 + userRepository.save(user); + } }