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 467d74a8..e05407df 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/", "/ws/**").permitAll() + "/api/v1/auth", "/oauth2/", "/login/oauth2/", "/ws/**", "/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); + } }