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";
}
'강의 따라하기 > member2' 카테고리의 다른 글
08. 회원정보 상세조회 (1) | 2023.12.28 |
---|---|
07. 회원목록 출력하기 (1) | 2023.12.28 |
05. 회원가입_회원가입 완료 (0) | 2023.12.28 |
05. 회원가입_DB 연동하기 (1) | 2023.12.28 |
05. 회원가입_입력한 정보 컨트롤러로 전달하기 (0) | 2023.12.28 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기