안녕하세요

MongoDB - 중복ID체크, ID/Password 유효성 검사 본문

스터디/코딩애플

MongoDB - 중복ID체크, ID/Password 유효성 검사

sakuraop 2023. 1. 6. 21:44

1. 회원가입할 때 아이디 중복체크

app.post("/register", (요청, 응답) => {
  db.collection("login").findOne({ id: 요청.body.id }, (에러, 결과) => {
 
=> 아이디가 있는지 찾아서, 있으면 이거 실행
    if (결과) {
      응답.redirect("/login");
 
=> 없으면 이거 실행
    } else {
      db.collection("login").insertOne({ id: 요청.body.id, pw: 요청.body.password }, (에러, 결과) => {
        응답.redirect("/");
      });
    }
  });
});
 

2. ID, Password 유효성 검사 (HTML도 하고 server도 해야함)

SERVER. 요청받은 데이터의 유효성을 검사하여 응답하도록 합니다. 

  // 아이디 유효성 검사
  const checkId = /^[a-zA-Z0-9]{4,20}$/;
  if (!checkId.test(요청.body.id)) {
    console.log("아디 4~20 자리의 영문자또는 숫자");
    return 응답.redirect("/login");
  }

  // 비밀번호 유효성 검사
  const checkPassword = /^[a-zA-Z0-9]{4,20}$/;
  if (!checkPassword.test(요청.body.password)) {
    console.log("비번 4~20 자리의 영문자또는 숫자");
    return 응답.redirect("/login");
  }
 
 
HTML5. input 태그에 입력 방지 기능을 추가합니다.

첫번째. 정규식을 이용한검사 pattern="RegExp"

pattern="" 안에 //를 제외한 정규식을 입력하면 됩니다.
          <input type="text" class="form-control" name="id" pattern="^[a-zA-Z0-9]{4,20}$" />
 
=> 하지만 이 경우에는 제출 시 검사를 해줄 뿐입니다.
=> 빈 칸일 경우에는 작업이 처리가 되지 않습니다.

 

두번째. input 태그 기능 required

위의 빈 칸 문제를 해결하려면 required를 입력해 빈 칸일 때 알림 창을 나타나게 합니다.

          <input type="text" class="form-control" name="id" pattern="^[a-zA-Z0-9]{4,20}$" required />

 

세번째. input 태그 기능 maxlength=""

 20자가 넘어가면 아예 입력을 못하게 합니다.

          <input type="text" class="form-control" name="id" pattern="^[a-zA-Z0-9]{4,20}$" required maxlength="20" />

 

네번째. JavaScript Event Handler (직접 코드 짜기)

onclick onKeyUp onChange 등의 이벤트를 이용하여 입력된 문자의 유효성을 직접 검증하여

잘못된 문자열이 포함된 input을 포커싱을 하도록 하거나,

유효하지 않은 문자를 replace 로 제거하거나,

아예 입력도 되지 않도록 하는 등

 

직접 기능을 구현합시다.

 


3. password 암호화하기

        if (입력한비번 == 결과.password) {

그런데 이렇게 비밀번호를 있는 그대로 DB에 저장하면...

DB에 password를 있는 그대로 저장했다가 해킹을 당하거나, 

DB관리자가 악용을 할 수도 있지 않겠습니까? 

다른 사이트에도 동일한 password를 사용하는 유저들의 피해가 커지게 됩니다. 

 

따라서 DB에 저장할 때 password를 암호화하여 저장해서 아무도 모르게 하고,

암호화된 password와 같은지 비교하도록 하는 것이 좋은 방법입니다.

 

(지금 할 줄 모름)