@RequestMapping("/usr/member/doLogin")
@ResponseBody
public ResultData<Member> doLogin(HttpServletRequest request, String loginId, String loginPw) {
HttpSession session = request.getSession();
// 이미 로그인된 상태인지 확인
if (session.getAttribute("loginUser") != null) {
return ResultData.from("F-0", "이미 로그인된 상태입니다.");
}
if (Ut.isEmptyOrNull(loginId))
return ResultData.from("F-1", "아이디를 입력해주세요.");
if (Ut.isEmptyOrNull(loginPw))
return ResultData.from("F-2", "비밀번호를 입력해주세요.");
ResultData<Member> loginRd = memberService.doLogin(loginId, loginPw);
if (loginRd.isFail()) return loginRd;
// 로그인 성공 시 세션에 사용자 정보 저장
session = request.getSession();
session.setAttribute("loginUser", loginRd.getData1());
return memberService.doLogin(loginId, loginPw);
}
public ResultData<Member> doLogin(String loginId, String loginPw) {
Member member = memberRepository.getMemberByLoginId(loginId);
if (member == null) {
return ResultData.from("F-3", "아이디 또는 비밀번호가 일치하지 않습니다.");
}
if (!member.getLoginPw().equals(loginPw)) {
return ResultData.from("F-3", "아이디 또는 비밀번호가 일치하지 않습니다.");
}
return ResultData.from("S-1", Ut.f("%s님 환영합니다.", member.getNickname()), member);
}
@Mapper
public interface MemberRepository {
@Select("SELECT LAST_INSERT_ID();")
public int getLastInsertId();
@Insert("INSERT INTO `member` SET regDate = NOW(), updateDate = NOW(), loginId = #{loginId}, loginPw = #{loginPw}, `name` = #{name}, nickname = #{nickname}, cellphoneNum = #{cellphoneNum}, email = #{email}")
public void doJoin(String loginId, String loginPw, String name, String nickname, String cellphoneNum, String email);
@Select("SELECT * FROM `member` WHERE id = #{id}")
public Member getMemberById(int id);
@Select("SELECT * FROM `member` WHERE loginId = #{loginId}")
public Member getMemberByLoginId(String loginId);
@Select("SELECT * FROM `member` WHERE nickname = #{nickname}")
public Member getMemberByNickname(String nickname);
@Select("SELECT * FROM `member` WHERE email = #{email}")
public Member getMemberByEmail(String email);
@Select("SELECT * FROM `member` WHERE email = #{email} AND `name` = #{name}")
public Member getMemberByNameAndEmail(String name, String email);
@Select("SELECT * FROM `member` WHERE cellphoneNum = #{cellphoneNum} AND `name` = #{name}")
public Member getMemberByNameAndCellphoneNum(String name, String cellphoneNum);
@Select("SELECT COUNT(*) FROM `member` WHERE loginId = #{loginId} AND loginPw = #{loginPw}")
public int doLogin(String loginId, String loginPw);
@Select("SELECT nickname FROM `member` WHERE id = #{id}")
public String getNickname(int id);
//
// @Select("SELECT * FROM `member` WHERE loginId = #{loginId}")
// public int getMemberByLoginId1(String loginId);
}
일단 중복쿼리가 전에는 존재했었다. 그 부분을 해결 하고, login 상태를 저장하기 위해서 저번에 배웠던 HttpSession session 을 사용해서 로그인 상태를 저장했다.
일단 바꾼 코드도 로그인이 잘 되는 것을 확인하고,
@RequestMapping("/usr/member/doLogout")
@ResponseBody
public ResultData<Void> doLogout(HttpSession session) {
// 로그인 상태 확인
if (session.getAttribute("loginUser") == null)
return ResultData.from("F-0", "로그인 상태가 아닙니다.");
// 로그아웃 처리
session.invalidate();
return ResultData.from("S-1", "로그아웃 되었습니다.");
}
로그아웃은 컨트롤러에만 구현하면 되서 간단하게 했다.
이렇게 끝!
'Coding History' 카테고리의 다른 글
Spring article , member 기능 구현중 (0) | 2024.08.18 |
---|---|
국비 지원 IT(웹앱개발) 취업반 강의 50일차 (Spring) (0) | 2024.08.18 |
국비 지원 IT(웹앱개발) 취업반 강의 48일차 (Spring) (1) | 2024.08.12 |
국비 지원 IT(웹앱개발) 취업반 강의 47일차 (Spring) (0) | 2024.08.11 |
국비 지원 IT(웹앱개발) 취업반 강의 46일차 (JSP) (0) | 2024.08.08 |