Spring 회원 프로젝트(6) 로그인하기

woohee·2024년 4월 9일

회원 프로젝트

목록 보기
7/9

🔖지난 포스트까지 회원가입 하는 과정을 거쳤다. 이제 사용자 정보를 가져와 로그인을 수행해보자!!


login.html 생성

login 과정은 간단하게 이메일, 비밀번호만 입력받아 로그인해보겠다.

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

MemberController 수정

login 페이지 요청과정 추가

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

사용자 로그인 정보 받아오기

memberService에 login 메서드 추가

 @PostMapping("/member/login")
    public String login(@ModelAttribute MemberDTO memberDTO, HttpSession session){
        MemberDTO loginResult= memberService.login(memberDTO);
        if(loginResult!=null){
            //login 성공
            session.setAttribute("loginEmail",loginResult.getMemberEmail());
            return "main";
        }else{
            //login 실패
            return "login";
        }
    }

MemberRepository 수정

메서드 추가

   // 이메일로 회원 정보 조회(select * from member_table where member_email=?)
    Optional<MemberEntity> findByMemberEmail(String memberEmail);

MemberDTO 수정

MemberService는 dto 객체로 변환하는 메서드이므로 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 수정

    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 변환 후 리턴
               MemberDTO dto = MemberDTO.toMemberDTO(memberEntity);
               return dto;
           }
           else{
               //비밀번호 불일치
               return null;
           }
       }else{
           //조회 결과가 없다(해당 이메일을 가진 회원 정보가 없다)
           return null;
       }
   }
  • memberRepository의 findByMemberEmail()메서드를 통해 회원 이메일을 가져오기
  • 이메일 정보를 가진 회원이 존재한다면 memberEntity에 회원 정보 가져오기
  • memberEntity의 패스워드와 memberDTO의 패스워드가 같으면 entity->dto 변환 후 리턴
  • 비밀번호가 불일치하거나 이메일 정보가 없을 경우 null 리턴

main.html 생성

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>main</title>
</head>
<body>
  session 값 확인 : <p th:text="${session.loginEmail}"></p>
</body>
</html>

세션 값 확인

로그인까지 성공!


다음 포스트에서는 회원 목록을 조회하는 과정을 수행할 것이다!!

0개의 댓글