## 49. 로그인 적용하기
- 로그인을 구현하는 방법
- 로그인 정보를 가지고 관련 데이터를 다루는 방법
ㄴ MemberAddListener.java 파일을 복사하여 LoginListener 라는 이름의 클래스를 생성함
ddl2.sql
ㄴ member 테이블에 phone 컬럼을 unique key 로 설정하기
=> 전화번호로 로그인을 하기 위함
ㄴ ddl2.sql 에 따라 테이블 구조를 변경함
ㄴ phone 컬럼이 unique key 로 설정됨을 확인할 수 있음
LoginListener.java
ㄴ 이름 받는 부분을 제거
=> 전화번호를 이용하여 로그인 하기 때문
LoginListener.java
ㄴ 관리자와 일반직원 구분을 입력받을 필요 없으므로 제거
LoginListener.java
ㄴ 전화번호와 암호로 로그인하기위한 메서드 이용(생성할 것)
LoginListener.java
ㄴ memberDao 의 findByPhoneAndPassword 메서드의 리턴값을 loginUser 라는 Member 변수에 담기
LoginListener.java
ㄴ loginUser 에 담긴 값이 null 과 같다면 "회원 정보가 일치하지 않습니다" 를 출력하도록 함
LoginListener.java
ㄴ while (true) 를 이용하여 무한반복 설정하기
MemberDao.java
ㄴ MemberDao 인터페이스에 findByPhoneAndPassword 메서드를 추가하여 관리하도록 함
MemberDao.java
ㄴ 같은 findBy 종류끼리 비슷한 위치에 있도록 해줌
MySQLMemberDao.java
ㄴ findBy 메서드를 복사하여 바로 밑에 붙여넣고 findByPhoneAndPassword 라는 이름으로 변경해줌
ㄴ 파라미터 값은 Member 타입을 받도록 변경해줌
MySQLMemberDao.java
ㄴ phone 과 password 를 이용해 찾을 수 있도록 where절에 phone 과 password 를 추가
MySQLMemberDao.java
ㄴ 받아오는 파라미터 변수를 m 으로 하면 헷갈릴 수 있으니 받아오는 파라미터 값을 의미하는 변수명으로 param 으로 변경해줌
ClientApp.java
ㄴ execute 가 실행될 때 로그인을 하도록 LoginListener 를 추가해줌
ㄴ 현재 report_member 테이블에 존재하는 데이터 값 확인
ClientApp.java 실행
ㄴ 회원 정보가 일치하지 않을 경우 "회원 정보가 일치하지 않습니다" 문자열이 출력되고, 일치하는 경우에는 그대로 while 문 무한반복을 진행함
=>
로그인 된 유저는 시스템을 실행할 수 있도록 해야함
ClientApp.java
ㄴ loginUser 를 필드에 추가
LoginListener.java
ㄴ 로그인에 성공하면 ClientApp 에 있는 loginUser 를 현재 loginUser 에 담은 값으로 설정해준 후 while 문을 나가도록 해줌
ClientApp.java 실행하여 확인
ㄴ 로그인에 실패하면 "회원 정보가 일치하지 않습니다." 문구가 출력되고 while 문을 계속 돌고, 로그인에 성공하면 메뉴를 띄워주는 것을 확인
=>
ㄴ 자식 메뉴들도 실행 가능한 것을 확인
BoardAddListener.java
ㄴ 게시글 등록 시 로그인 사용자의 정보를 이용할 것이므로 해당 코드는 제거
BoardAddListener.java
ㄴ 작성자는 ClientApp의 loginUser 를 이용하여 입력되도록 함
BoardUpdateListener.java
ㄴ 작성자는 ClientApp의 loginUser 를 이용하여 입력되도록 함
BoardUpdateListener.java
ㄴ 로그인 사용자가 작성한 게시글이 아니라면 변경할 수 없도록 하므로 문구명을 "게시글 변경 권한이 없습니다." 로 변경
BoardDeleteListener.java
ㄴ 작성자는 ClientApp의 loginUser 를 이용하여 입력되도록 함
BoardDeleteListener.java
ㄴ 로그인 사용자가 작성한 게시글이 아니라면 삭제할 수 없도록 하므로 문구명을 "해당 번호의 게시글이 없거나 게시글 삭제 권한이 없습니다." 로 변경
MySQLBoardDao.java
ㄴ where 절에 writer 를 추가하여 해당 게시글의 작성자인지 확인하도록 쿼리문 변경
MySQLBoardDao.java
ㄴ 쿼리문에서 password 대신 writer 를 이용하므로 해당 코드도 변경해줌
MySQLBoardDao.java
ㄴ where 절에 writer 를 추가하여 해당 게시글의 작성자인지 확인하도록 쿼리문 변경
MySQLBoardDao.java
ㄴ 쿼리문에서 password 대신 writer 를 이용하므로 해당 코드도 변경해줌
ClientApp.java 실행
ㄴ 본인이 작성한 글은 삭제 가능함을 확인
ㄴ 타인이 작성한 글은 삭제 불가능함을 확인