KSI일기장
0427spring 회원가입 (+닉네임 유효성 중복검사) 본문
//닉네임 유효성 검사 js
// 닉네임 유효성 검사
const memberNickname = document.getElementById("memberNickname");
const nicknameMessage = document.getElementById("nicknameMessage");
memberNickname.addEventListener("input", function(){
// 입력되지 않은 경우
if(memberNickname.value.length == 0){
nicknameMessage.innerText = "영어/숫자/한글 2~10글자 사이로 작성해주세요.";
nicknameMessage.classList.remove("confirm", "error");
checkObj.memberNickname = false; // 유효 X 기록
return;
}
const regExp = /^[a-zA-Z0-9가-힣]{2,10}$/;
if( regExp.test(memberNickname.value) ){ // 유효한 경우
// ****** 닉네임 중복 검사(ajax) 진행 예정 ******
// /community/member/nicknameDupCheck
$.ajax({
url : "nicknameDupCheck", // 필수 작성 속성
data : { "memberNickname" : memberNickname.value }, // 서버로 전달할 값(파라미터)
type : "GET", // 데이터 전달 방식(기본값 GET)
success : function(res){ // 비동기 통신 성공 시(에러 발생 X)
// 매개변수 res : Servlet에서 응답으로 출력된 데이터가 저장
if(res == 0){ // 닉네임 중복 X
nicknameMessage.innerText = "사용 가능한 닉네임 입니다.";
nicknameMessage.classList.add("confirm");
nicknameMessage.classList.remove("error");
checkObj.memberNickname = true; // 유효 O 기록
} else { // 닉네임 중복 O
nicknameMessage.innerText = "이미 사용중인 닉네임 입니다.";
nicknameMessage.classList.add("error");
nicknameMessage.classList.remove("confirm");
checkObj.memberNickname = false; // 유효 O 기록
}
},
error : function(){ // 비동기 통신 중 에러가 발생한 경우
console.log("에러 발생");
}
});
}else{
nicknameMessage.innerText = "닉네임 형식이 유효하지 않습니다.";
nicknameMessage.classList.add("error");
nicknameMessage.classList.remove("confirm");
checkObj.memberNickname = false; // 유효 X 기록
}
});
//MemberController
//회원가입(sqlSession.insert()) -> <insert></insert>
//*****방법1*****
// @PostMapping("/signUp")
// //= Post방식 (<form action="signUp">)
// public String signUp(@ModelAttribute Member member) {
// //-> VO Member를 가져오기 위해 @ModelAttribute 사용
// //-> 단, VO Member 필드 변수명과 signUp.jsp의 주소 name값 memberAddress이 같아야
// //@ModelAttribute 사용 가능
//
//
// int result = service.signUp(member);
// return "redirect:/";
//
// }
//*****방법2*****
@PostMapping("/signUp")
//= Post방식 (<form action="signUp">)
public String signUp(Member inputMember, String[] memberAddress,
RedirectAttributes ra) {
//-> VO Member를 가져오기 위해 @ModelAttribute 사용
//-> 단, VO Member 필드 변수명과 signUp.jsp의 주소 name값 memberAddress이 같아야
//@ModelAttribute 사용 가능
//같은 name을 가진 주소가 하나의 문자열로 합쳐져 들어오게 된다
//->도로명 주소에 ","기호가 포함되는 경우가 있어 ","를 구분자로 사용할 수 없다
//String[] memberAddress 안에는
//name이 memberAddress인 파라미터 값이 모두 배열에 담아서 반환
inputMember.setMemberAddress(String.join(",,", memberAddress));
//String.join("구분자", 배열)
//배열을 하나의 문자열로 합치는 메서드
//중간에 구분자가 포함되 문자열이 생성된다
//-> ex) [a,b,c] -join진행 "a,,b,,c"
//null값일 때 ,, ,,
if(inputMember.getMemberAddress().equals(",,,,")) { //주소가 입력되지 않은 경우
inputMember.setMemberAddress(null); //null로 반환
}
//회원가입 서비스 호출
int result = service.signUp(inputMember);
String message = null;
String path = null;
if(result>0) { //회원가입 성공시
message = "회원가입성공";
path = "redirect:/";
}else { //회원가입 실패시
message = "회원가입실패";
path = "redirect:/member/signUp";
}
ra.addFlashAttribute("message", message);
return path;
}
//닉네임 중복 검사
@ResponseBody
@GetMapping("/nicknameDupCheck")
//@GetMapping("url")
public int nickDupCheck(String memberNickname) {
int result = service.nickDupCheck(memberNickname);
return result;
}
//MemberServiceImpl
//회원가입
//*****방법1*****
// @Override
// public int signUp(Member member) {
//
// member.setMemberPw( bcrypt.encode(member.getMemberPw()) );
// //-> 회원가입시 Pw값이 DB에 암호화 되어 저장되기 위한 것
//
// return dao.signUp(member);
// }
//*****방법2*****
@Override
public int signUp(Member inputMember) {
//비밀번호 암호화(bycrypt)
String encPw = bcrypt.encode(inputMember.getMemberPw());
//암호화된 비밀번호로 다시 세팅
inputMember.setMemberPw(encPw);
return dao.signUp(inputMember);
}
//닉네임 중복검사
@Override
public int nickDupCheck(String memberNickname) {
return dao.nickDupCheck(memberNickname);
}
//MemberService
public interface MemberService {
//모든 메서드가 추상 메서드(public abstract)
//모든 필드는 상수 (public static final)
//회원가입
//*****방법1*****
//public int signUp(Member member);
//*****방법2*****
public int signUp(Member inputMember);
}
//닉네임 중복검사
public int nickDupCheck(String memberNickname);
//MemberDAO
/**회원가입
* @param memberEmail
* @param memberPw
* @param memberNickname
* @param memberTel
* @return
*/
public int signUp(Member member) {
return sqlSession.insert("memberMapper.signUp", member);
//sqlSession.insert(" mapper에서 <insert id="signUp">의 id값")
}
/**닉네임 중복검사
* @param memberNickname
* @return
*/
public int nickDupCheck(String memberNickname) {
return sqlSession.selectOne("memberMapper.nickDupCheck", memberNickname);
}
//member-mapper
<!-- 회원가입 -->
<insert id="signUp" parameterType="member">
INSERT INTO MEMBER_S
VALUES (SEQ_MEMBER_NO_S.NEXTVAL, #{memberEmail}, #{memberPw},#{memberNickname}, #{memberTel}, #{memberAddress}, DEFAULT, DEFAULT, DEFAULT)
</insert>
<!-- 닉네임 중복검사 -->
<select id="nickDupCheck" parameterType="string" resultType="_int">
SELECT COUNT(*) FROM MEMBER_S
WHERE MEMBER_NICK = #{memberNickname}
AND SECESSION_FL = 'N'
</select>
'Spring' 카테고리의 다른 글
0427spring 비동기로 웹페이지에 회원정보 전체조회 (0) | 2023.04.27 |
---|---|
0427 spring웹페이지에서 이메일 입력해 회원정보조회 (0) | 2023.04.27 |
0427spring예외처리 (0) | 2023.04.27 |
0426spring 회원가입시 주소검색 가능하게 만들기 (0) | 2023.04.26 |
0426 spring 이메일 중복, 유효성 검사 (0) | 2023.04.26 |