Skip to content

Commit

Permalink
#42 - Refactor: 회원 기본정보/비밀번호 수정시 회원 조회 코드 서비스 단으로 이동, DTO명 변경"
Browse files Browse the repository at this point in the history
  • Loading branch information
ahah525 committed Dec 21, 2022
1 parent d41699e commit cce984e
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.example.mutbooks.app.member.exception.UsernameDuplicationException;
import com.example.mutbooks.app.member.form.JoinForm;
import com.example.mutbooks.app.member.form.ModifyForm;
import com.example.mutbooks.app.member.form.PwdModifyForm;
import com.example.mutbooks.app.member.form.PasswordUpdateForm;
import com.example.mutbooks.app.member.form.WithdrawAccountForm;
import com.example.mutbooks.app.member.service.MemberService;
import com.example.mutbooks.app.member.validator.PwdModifyFormValidator;
Expand Down Expand Up @@ -86,36 +86,32 @@ public String modifyProfile(@AuthenticationPrincipal MemberContext memberContext
if(bindingResult.hasErrors()) {
return "member/modify";
}

Member member = memberService.findByUsername(memberContext.getUsername());
memberService.modifyProfile(member, modifyForm);
memberService.modifyProfile(memberContext.getUsername(), modifyForm);

return "redirect:/member/profile";
}

// 비밀번호 수정폼
@PreAuthorize("isAuthenticated()")
@GetMapping("/modifyPassword")
public String modifyPassword(PwdModifyForm pwdModifyForm) {
public String modifyPassword(PasswordUpdateForm passwordUpdateForm) {
return "member/modify_password";
}

// 비밀번호 수정
@PreAuthorize("isAuthenticated()")
@PostMapping("/modifyPassword")
public String modifyProfile(@AuthenticationPrincipal MemberContext memberContext,
@Valid PwdModifyForm pwdModifyForm, BindingResult bindingResult,
@Valid PasswordUpdateForm passwordUpdateForm, BindingResult bindingResult,
HttpServletRequest request) {
// 유효성 검증 추가
pwdModifyFormValidator.validate(pwdModifyForm, bindingResult);
pwdModifyFormValidator.validate(passwordUpdateForm, bindingResult);

if(bindingResult.hasErrors()) {
System.out.println("bindingResult = " + bindingResult.getErrorCount());
return "member/modify_password";
}

Member member = memberService.findByUsername(memberContext.getUsername());
memberService.modifyPassword(member, pwdModifyForm);
memberService.modifyPassword(memberContext.getUsername(), passwordUpdateForm);

// 강제 로그아웃 처리 후 로그인 페이지로 리다이렉트
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.example.mutbooks.app.member.form;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;

@Data
@Builder
@AllArgsConstructor
public class ModifyForm {
private String nickname;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.mutbooks.app.member.form;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

Expand All @@ -8,7 +9,8 @@

@Getter
@Setter
public class PwdModifyForm {
@Builder
public class PasswordUpdateForm {
//TODO: 테스트 편의를 위해 잠시 주석처리
//@Size(min = 8, max = 16, message = "비밀번호는 8 ~ 16자리로 입력해주세요.")
@NotEmpty(message = "현재 비밀번호를 입력해주세요.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import com.example.mutbooks.app.member.exception.UsernameDuplicationException;
import com.example.mutbooks.app.member.form.JoinForm;
import com.example.mutbooks.app.member.form.ModifyForm;
import com.example.mutbooks.app.member.form.PwdModifyForm;
import com.example.mutbooks.app.member.form.PasswordUpdateForm;
import com.example.mutbooks.app.member.form.WithdrawAccountForm;
import com.example.mutbooks.app.member.repository.MemberRepository;
import com.example.mutbooks.app.security.dto.MemberContext;
Expand Down Expand Up @@ -81,10 +81,13 @@ public void checkEmailDuplication(String email) {

// 회원기본 정보 수정
@Transactional
public void modifyProfile(Member member, ModifyForm modifyForm) {
public void modifyProfile(String username, ModifyForm modifyForm) {
// TODO : Not Found Exception 처리
Member member = memberRepository.findByUsername(username).orElseThrow(() -> new RuntimeException());
// TODO : 작가->일반 회원 될 수 있는지 고민(글 작성자 이름 표시 문제)
// TODO : 이메일 변경할 경우 이메일 인증여부
member.modifyInfo(modifyForm.getEmail(), modifyForm.getNickname().trim());

// 세션값 강제 수정
forceAuthentication(member);
}

Expand Down Expand Up @@ -141,13 +144,14 @@ public void modifyPassword(Member member, String password) {

// 비밀번호 수정
@Transactional
public void modifyPassword(Member member, PwdModifyForm pwdModifyForm) {
public void modifyPassword(String username, PasswordUpdateForm passwordUpdateForm) {
// TODO : Not Found Exception 처리
Member member = memberRepository.findByUsername(username).orElseThrow(() -> new RuntimeException());
// 기존 비밀번호가 맞는지 검증 후 수정
if(!passwordEncoder.matches(pwdModifyForm.getPassword(), member.getPassword())) {
if(!passwordEncoder.matches(passwordUpdateForm.getPassword(), member.getPassword())) {
throw new PasswordNotMatchedException("기존 비밀번호와 일치하지 않습니다.");
}

String newPassword = passwordEncoder.encode(pwdModifyForm.getNewPassword());
String newPassword = passwordEncoder.encode(passwordUpdateForm.getNewPassword());
member.updatePassword(newPassword);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mutbooks.app.member.validator;

import com.example.mutbooks.app.member.form.PwdModifyForm;
import com.example.mutbooks.app.member.form.PasswordUpdateForm;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
Expand All @@ -9,17 +9,17 @@
public class PwdModifyFormValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return PwdModifyForm.class.isAssignableFrom(clazz);
return PasswordUpdateForm.class.isAssignableFrom(clazz);
}

@Override
public void validate(Object target, Errors errors) {
PwdModifyForm pwdModifyForm = (PwdModifyForm) target;
if(!pwdModifyForm.getNewPassword().equals(pwdModifyForm.getNewPasswordConfirm())) {
PasswordUpdateForm passwordUpdateForm = (PasswordUpdateForm) target;
if(!passwordUpdateForm.getNewPassword().equals(passwordUpdateForm.getNewPasswordConfirm())) {
errors.rejectValue("newPasswordConfirm", "notMatchNewPasswordAndNewPasswordConfirm", "입력한 새 비밀번호가 일치하지 않습니다.");
}

if(pwdModifyForm.getNewPassword().equals(pwdModifyForm.getPassword())) {
if(passwordUpdateForm.getNewPassword().equals(passwordUpdateForm.getPassword())) {
errors.rejectValue("newPassword", "samePassword", "기존 비밀번호와 일치합니다.");
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ <h1 class="font-bold text-lg mb-3">비밀번호 변경</h1>


<form th:action method="POST" class="flex flex-col gap-3"
onsubmit="ModifyPassword__submit(this); return false;" th:object="${pwdModifyForm}">
onsubmit="ModifyPassword__submit(this); return false;" th:object="${passwordUpdateForm}">

<div class="form-control">
<input type="password" name="password" placeholder="현재 비밀번호" class="input input-bordered" maxlength="50">
Expand Down

0 comments on commit cce984e

Please sign in to comment.