간격이나 버튼 등을 가독성 있게 변경
로그인을 시도하려는 회원이 메일 인증을 완료했는지 판별
// 로그인 요청 처리
@PostMapping (value = "login")
public String login(@ModelAttribute MemberVO member, Model model, HttpSession session) {
// 인증 회원 여부 조회
int authenticatedUser = service.authenticatedUser(member.getMember_id());
System.out.println(authenticatedUser);
if(authenticatedUser > 0) {
로
그
인
작
업
// 인증 회원이 아니면 "메일 인증 필수" 메시지가 뜨도록
} else {
model.addAttribute("msg", "메일 인증 필수");
return "fail_back";
}
}
<!-- 로그인 - 인증 회원 여부 조회 -->
<select id="selectAuthenticatedUser" resultType="int">
SELECT COUNT(*)
FROM member
WHERE
member_id = #{member_id}
AND
member_auth_gb = "Y"
</select>
INFO : jdbc.sqlonly - SELECT COUNT(*) FROM member WHERE member_id = 'chacha' AND member_auth_gb = "Y"
INFO : jdbc.resultsettable -
|---------|
|count(*) |
|---------|
|1 |
|---------|
INFO : jdbc.sqlonly - SELECT COUNT(*) FROM member WHERE member_id = 'admin' AND member_auth_gb = "Y"
INFO : jdbc.resultsettable -
|---------|
|count(*) |
|---------|
|0 |
|---------|
메일 인증을 완료한 (member_auth_gb가 'Y'인) 회원 ID로 로그인을 시도할 시 1이 넘어오고, 완료하지 않은 회원 ID로 로그인을 시도할 시 0이 넘어오는 것을 확인
회원가입 시 암호화를 통해 패스워드를 저장했다. 그러므로 로그인 시에도 암호화를 진행해 member 테이블에 있는 패스워드와 일치여부를 따져야한다.
먼저 로그인을 시도하는 아이디에 해당하는 패스워드를 조회한다.
// 로그인 요청 처리
@PostMapping (value = "login")
public String login(@ModelAttribute MemberVO member, Model model, HttpSession session) {
// 인증 회원 여부 조회
int authenticatedUser = service.authenticatedUser(member.getMember_id());
if(authenticatedUser > 0) {
// ------------------ BCryptPasswordEncoder 활용한 로그인 판별 ----------------------
// 1. BCryptPasswordEncoder 객체 생성
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
// 2. member 테이블에서 id에 해당하는 패스워드 조회 후 리턴값 저장
// => 파라미터 : 아이디 리턴타입 : String(passwd)
String passwd = service.getPasswd(member.getMember_id());
.
.
.
}
} else {
model.addAttribute("msg", "메일 인증 필수");
return "fail_back";
}
}
<!-- 로그인 - BCryptPasswordEncoder 활용한 로그인을 위해 패스워드 조회 -->
<select id="selectPasswd" resultType="string">
SELECT member_passwd
FROM member
WHERE member_id = #{member_id}
</select>
⬇️chacha라는 아이디를 가진 회원으로 로그인을 시도한 결과, passwd가 잘 가져와지는 것을 확인!⬇️
INFO : jdbc.sqlonly - SELECT member_passwd FROM member WHERE member_id = 'chacha'
INFO : jdbc.resultsettable -
|-------------------------------------------------------------|
|member_passwd |
|-------------------------------------------------------------|
|$2a$10$LOc9Zqi4gBRlMH7C.PAaROIQ7YZBIDc6ccGJzsJxBB6lAqzNYOrIC |
|-------------------------------------------------------------|
$2a$10$LOc9Zqi4gBRlMH7C.PAaROIQ7YZBIDc6ccGJzsJxBB6lAqzNYOrIC
// 로그인 요청 처리
@PostMapping (value = "login")
public String login(@ModelAttribute MemberVO member, Model model, HttpSession session) {
// 인증 회원 여부 조회
int authenticatedUser = service.authenticatedUser(member.getMember_id());
if(authenticatedUser > 0) {
// ------------------ BCryptPasswordEncoder 활용한 로그인 판별 ----------------------
.
.
.
// 3. 조회 결과를 활용하여 로그인 성공 여부 판별
// 1) 아이디가 없을 경우(passwd 값이 null) 실패
// 2) 패스워드 비교(BCryptPasswordEncoder 객체의 matches() 메서드 활용)
// 2-1) 다를 경우 실패
// 2-2) 같을 경우 성공
if(passwd == null || !encoder.matches(member.getMember_passwd(), passwd)) {
model.addAttribute("msg", "로그인 실패!");
return "fail_back";
} else {
// HttpSession 객체에 세션 아이디 저장 후 메인페이지로 이동(Redirect 방식)
session.setAttribute("sId", member.getMember_id());
return "redirect:/";
}
} else {
model.addAttribute("msg", "메일 인증 필수");
return "fail_back";
}
}
인증 완료된 회원의 아이디와 패스워드를 알맞게 넣을 시 로그인 성공!