JUST GO

[공통] 비밀번호 재설정 본문

Spring Boot/학습내용

[공통] 비밀번호 재설정

root_go 2022. 11. 9. 16:52

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를 반환. 끝.