Hello

06. 로그인 하기

by 볼빵빵오춘기

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>로그인</title>
</head>
<body>
<form action="/member/login" method="post">
    이메일 : <input type="text" name="memberEmail">
    비밀번호 : <input type="password" name="memberPassword">
    <input type="submit" value="로그인">
</form>
</body>
</html>

 

MemberController

로그인 했을 때와 안 됐을 때를 나눠서 코드를 작성해야하므로 login() 메서드의 결과를 변수에 넣고 그 변수가 null인지 아닌지에 따라 return을 다르게 해준다.

    @PostMapping("/member/login")
    public String login(@ModelAttribute MemberDTO memberDTO){
        MemberDTO loginResult = memberService.login(memberDTO);

        if(loginResult != null){
            return "main";
        }else{
            return "login";
        }

    }

 

MemberService

회원이 입력한 이메일로 DB에서 조회를 한다.

DB에서 조회한 비밀번호와 사용자가 입력한 비밀번호가 일치하는지 판단한다.

public MemberDTO login(MemberDTO memberDTO) {
    // 1. 회원이 입력한 이메일로 DB에서 조회를 함
    // 2. DB에서 조회한 비밀번호와 사용자가 입력한 비밀번호가 일치하는지 판단

}

 

MemberRepository

  • findByMemberEmail(String memberEmail)을 사용하였는데 JPA 쿼리 문법이다.
더보기

JPA쿼리 문법으로 findBy컬럼명을 하면 해당 컬럼을 DB에서 조회할 수 있다. 

아래 findByMemberEmail(String memberEmail); 이라고 적었는데 

‘select * from 테이블명 where member_email = ?’ 이 쿼리와 같다고 생각하면 된다.

  • Optional 을 붙여 줬는데 javautile에서 제공하는 클래스로써 Optional null방지를 해주는 클래스다.
    Optional 로 감싸서 객체를 넘겨준다.
    Repository에서 주고받는 객체는 Entity객체로 return을 받는다.
Optional<MemberEntity> findByMemberEmail(String memberEmail);

 

MemberService

public MemberDTO login(MemberDTO memberDTO) {
    // 1. 회원이 입력한 이메일로 DB에서 조회를 함
    // 2. DB에서 조회한 비밀번호와 사용자가 입력한 비밀번호가 일치하는지 판단
    Optional<MemberEntity> byMemberEmail = memberRepository.findByMemberEmail(memberDTO.getMemberEmail());

    if(byMemberEmail.isPresent()){
        // 조회 결과가 있다.(해당 이메일을 가진 회원 정보가 있다.)
        MemberEntity memberEntity = byMemberEmail.get();
        if(memberEntity.getMemberPassword().equals(memberDTO.getMemberPassword())){
            // 비번 일치
            // entity -> dto 변환 후 처리 // 작성해야 함!! 

        }else{
            // 비번 불일치(로그인 실패)
            return null;
        }
    }else{
        // 조회 결과가 없다.(해당 이메일을 가진 회원 정보가 없다.)
        return null;
    }
}

 

MemberDTO

entity→dto 변환 메서드 작성한다. 

public static MemberDTO toMemberDTO(MemberEntity memberEntity){
    MemberDTO memberDTO = new MemberDTO();
    memberDTO.setId(memberEntity.getId());
    memberDTO.setMemberEmail(memberEntity.getMemberEmail());
    memberDTO.setMemberPassword(memberEntity.getMemberPassword());
    memberDTO.setMemberName(memberEntity.getMemberName());
    return memberDTO;
}

 

MemberService

entity→dto 변환 메서드로 MemberService.java에 login() 완성한다.

public MemberDTO login(MemberDTO memberDTO) {
    // 1. 회원이 입력한 이메일로 DB에서 조회를 함
    // 2. DB에서 조회한 비밀번호와 사용자가 입력한 비밀번호가 일치하는지 판단
    Optional<MemberEntity> byMemberEmail = memberRepository.findByMemberEmail(memberDTO.getMemberEmail());

    if(byMemberEmail.isPresent()){
        // 조회 결과가 있다.(해당 이메일을 가진 회원 정보가 있다.)
        MemberEntity memberEntity = byMemberEmail.get();
        if(memberEntity.getMemberPassword().equals(memberDTO.getMemberPassword())){
            // 비번 일치
            // entity -> dto 변환 후 처리 
            // DTO에서 작성한 메서드로 완성
            MemberDTO dto = MemberDTO.toMemberDTO(memberEntity);
            return dto;

        }else{
            // 비번 불일치(로그인 실패)
            return null;
        }
    }else{
        // 조회 결과가 없다.(해당 이메일을 가진 회원 정보가 없다.)
        return null;
    }
}

 

MemberController

session을 추가한다.

    @PostMapping("/member/login")
    public String login(@ModelAttribute MemberDTO memberDTO, HttpSession session){
        MemberDTO loginResult = memberService.login(memberDTO);

        if(loginResult != null){
            session.setAttribute("loginEmail",loginResult.getMemberEmail());
            return "main";
        }else{
            return "login";
        }

    }

 

main.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>main</title>
</head>
<body>
    session 값 확인 :
    <span th:text="${session.loginEmail}"></span><br>
    <a href="/member/update">내 정보 수정하기</a>
    <a href="/member/logout">로그아웃</a>
</body>
</html>

 

MemberController

    @GetMapping("/member/login")
    public String loginForm(){
        return "login";
    }

 

 

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기