JUST GO
[공통] 비밀번호 재설정 본문
String MemberController .patchRecoverPassword (EmailAuthEntity emailAuth, UserEntity user)
Enum<? extends IResult> MemberService .recoverPassword (EmailAuthEntity emailAuth, UserEntity user)
// MemberController
@RequestMapping(value = "recoverPassword",
method = RequestMethod.PATCH,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String patchRecoverPassword(EmailAuthEntity emailAuth, UserEntity user){
Enum<?> result = this.memberService.recoverPassword(emailAuth, user);
JSONObject responseObject = new JSONObject();
responseObject.put("result", result.name().toLowerCase());
return responseObject.toString();
}
// MemberService
public Enum<? extends IResult> recoverPassword(EmailAuthEntity emailAuth, UserEntity user) {
EmailAuthEntity existingEmailAuth = this.memberMapper.selectEmailAuthByEmailCodeSalt(
emailAuth.getEmail(),
emailAuth.getCode(),
emailAuth.getSalt());
if (existingEmailAuth == null || !existingEmailAuth.isExpired()){
return CommonResult.FAILURE;
}
UserEntity existingUser = this.memberMapper.selectUserByEmail(existingEmailAuth.getEmail());
// 비밀번호 해싱
existingUser.setPassword(CryptoUtils.hashSha512(user.getPassword()));
if (this.memberMapper.updateUser(existingUser) == 0){
return CommonResult.FAILURE;
}
return CommonResult.SUCCESS;
}
// ImemberMapper
int updateUser(UserEntity user);
// MemberMapper.xml
<update id="updateUser"
parameterType="dev.rootgo.studymemberbbs.entities.member.UserEntity">
UPDATE `study_member`.`users`
SET `email` = #{email},
`password` = #{password},
`nickname` = #{nickname},
`name` = #{name},
`address_postal` = #{addressPostal},
`address_secondary` = #{addressSecondary},
`registered_on` = #{registeredOn}
WHERE BINARY `email` = #{email}
LIMIT 1
</update>
서비스 로직
1. 전달 받은 EmailAuthEntity 타입의 emailAuth가 가진 email, code, salt를 통해 테이블에서 새로운 EmailAuthEntity 객체를 SELECT 해온다.
2. <1>에서 SELECT한 객체가 null 이거나 isExpried() 호출 결과가 false 인 경우 FAILURE 반환. 끝.
3. <1>에서 SELECT한 객체가 가진 email 값으로 새로운 UserEntity 타입의 객체를 SELECT 해온다.
4. <3> 에서 SELECT한 UserEntity 타입의 객체에 대해 PRIMARY KEY 필드를 기준으로 나머지 열 전체에 대해 UPDATE 한다.
5. <4> 에서 수정한 UserEntity 타입의 객체에 대해 PRIMARY KEY 필드를 기준으로 나머지 열 전체에 대해 UPDATE 한다.
6. <5> 의 결과가 0이면 FAILURE, 아니면 SUCCESS를 반환. 끝.
'Spring Boot > 학습내용' 카테고리의 다른 글
[공통] 세션 (0) | 2022.11.14 |
---|---|
[공통] login (0) | 2022.11.10 |
[공통] 이메일로 전송된 링크 클릭시 그 링크에 포함된 ECS(Email, Code, Salt)로 구성된 EmailAuthEntity 와 일치하는 레코드의 'expired_flag' 값을 true 로 수정하는 여정 (0) | 2022.11.09 |
[공통] th:fragment (0) | 2022.11.08 |
[공통] CryptoUtils (0) | 2022.11.08 |