[Node+MongoDB] 중복아이디 가입제한, 가입시 비번확인란, 로그인 유저만 글 작성

김나나·2024년 8월 29일

Node.js

목록 보기
24/50

Q1) 회원가입 시켜줄 때 중복아이디로 가입하는 것 막기

app.post("/register", async (요청, 응답) => {
  let 해시 = await bcrypt.hash(요청.body.password, 10);

  let result = await db
    .collection("user")
    .findOne({ username: 요청.body.username });

  if (result) {
    응답.send("이미 존재하는 id입니다.");
    console.log(result);
  } else {
    await db.collection("user").insertOne({
      username: 요청.body.username,
      password: 해시,
    });
    응답.redirect("/login");
  }
});

findOne으로 작성한 username과 동일한 username이 db에 있는 경우에는 가입을 시키지 않고, 동일한 username이 없는 경우에는 insertOne을 사용해서 db에 저장해줄 수 있도록 만들어주었다.


Q2) 유저 비번 입력 확인란을 만들어 일치하는 경우에만 가입

우선 회원가입 ejs페이지에 비밀번호 확인을 위한 input태그 하나를 추가

이후 서버파일로 돌아가서 password와 repassword를 비교해보고,
같은 경우에만 db에 저장할 수 있도록 작성

app.post("/register", async (요청, 응답) => {
  let 해시 = await bcrypt.hash(요청.body.password, 10);

  let result = await db
    .collection("user")
    .findOne({ username: 요청.body.username });

  if (result) {
    응답.send("이미 존재하는 id입니다.");
    console.log(result);
  } else {
    if (요청.body.password === 요청.body.repassword) {
      await db.collection("user").insertOne({
        username: 요청.body.username,
        password: 해시,
      });
      응답.redirect("/login");
    } else {
      응답.send("비밀번호를 다시 확인해주세요.");
    }
  }
});

Q3) 로그인 유저만 글 작성이 가능하도록

app.post("/write-post", async (req, res) => {
  if (req.isAuthenticated()) {
    try {
      if (req.body.post_title == "" || req.body.post_con == "") {
        res.send("빈 칸을 채워주세요.");
      } else {
        await db.collection("test-post").insertOne({
          post_title: req.body.post_title,
          post_con: req.body.post_con,
        });

        res.redirect("/post-list");
      }
    } catch (e) {
      console.log(e);
      res.status(500).send("서버 에러(status: 500)");
    }
  } else res.redirect("/login");
});

isAuthenticated()로 요청했을 때 값이 있는 경우에만 글을 작성 가능하게 만들고, 아닌 경우에는 로그인 페이지로 이동하게 만들어주었다.

profile
10분의 정리로 10시간을 아낄 수 있다는 마음으로 글을 작성하고 있습니다💕

0개의 댓글