JUST GO

[공통] login 본문

Spring Boot/학습내용

[공통] login

root_go 2022. 11. 10. 16:39

form.onsubmit : 입력한 이메일과 비밀번호를 POST 방식으로 '/member/login' 으로 전송. 응답 값에 대한 로직은 아직 미구현.

const xhr = new XMLHttpRequest();
    const formData = new FormData();
    formData.append('email', form['email'].value);
    formData.append('password', form['password'].value);
    xhr.open('POST', '/member/login');
    xhr.onreadystatechange = () => {
        if (xhr.readyState === XMLHttpRequest.DONE) {
            Cover.hide();
            if (xhr.status >= 200 && xhr.status < 300) {
                const responseObject = JSON.parse(xhr.responseText);
                switch (responseObject['result']) {
                    case 'success':
                        alert('성공');
                        break;
                    default:
                        alert('안돼씀');
                        Warning.show();
                }
            } else {
                Warning.show('서버와 통신하지 못하였습니다. 잠시 후 다시 시도해 주세요.');
            }
        }
    };
    xhr.send(formData);
}

 

@ResponseBody

String                      MemberController. .postLogin (UserEntity user)

-> 주소 : /member/login

-> 방식 : POST

-> 응답 : MediaType.APPLICATION_JSON_VALUE

-> 기타 : XHR 요청에 대한 응답을 하기위해 존재하는 매핑

-> 로직 : 하기 MemberService.login(...) 메서드 호출 결과에 따라 응답은 따로하지 않고 (return null;) 서비스가 반환하는 값에 따라 단순히 System.out.println(...) 을 활용하여 로그인 성공/실패 여부를 출력.

@RequestMapping(value = "login",
        method = RequestMethod.POST,
        produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String postLogin(UserEntity user){
    Enum<?> result = this.memberService.login(user);
    JSONObject responseObject = new JSONObject();
    responseObject.put("result", result.name().toLowerCase());
    return responseObject.toString();
}

 

Enum<? extends IResult> MemberService.login(UserEntity user)

-> 로직 : 전달 받은 UserEntity 타입 객체 'user' 가 가지는 'email' 및 'password' 에 대해 이들 두 개의 값과 일치하는 레코드에서 새로운 UserEntity 타입 객체 'user'가 가지는 'email' 및 'password'에 대해 이들 두 개의 값과 일치하는 레코드에서 새로운 UserEntity를 SELECT 하여, 이가 null 이면 로그인 실패(CommonResult.FAILURE), 어떠한 객체가 전달되었다면 로그인 성공(CommonResult.SUCCESS) 으로 판정하는 로직.

@Transactional
public Enum<? extends IResult> login(UserEntity user) {
    UserEntity existingUser = this.memberMapper.selectUserByEmailPassword(user.getEmail(), CryptoUtils.hashSha512(user.getPassword()));
    // 해싱된 비밀번호를 가져와야 한다.

    if (existingUser == null){
        return CommonResult.FAILURE;
    }
    return CommonResult.SUCCESS;

}