mongoose와 mongoDB를 이용한 로그인 page만들기

서정준·2022년 7월 4일
1
post-thumbnail

로그인을 하기 위해선 우선 회원정보가 있어야 합니다.

회원 정보는 어떻게 만들어 질까?

1. Mongoose를 이용한 회원 model만들기

Mongoose를 이용하기 위해 아래 두 과정이 필요합니다.

  • Defining your schema
  • Creating a model

https://velog.io/@tree0787/mongoose

//Defining my schema
const userSchema = new mongoose.Schema({
  avatarUrl: String,
  email: { type: String, required: true, unique: true },
  username: { type: String, required: true, unique: true },
  password: { type: String },
  name: { type: String },
});

//2. Creating a model
const User = mongoose.model("User", userSchema);

2. mongoose와 mongoDB를 연결하기

mongoose.connect("mongodb://127.0.0.1:27017/ES6");

3. 사용자가 입력한 회원 정보 server로 전달해 주기

const { name, username, email, password, password2} = req.body;

4. 사용자 친화적인 환경 만들어 주기

4.1 username과 email이 존재할 경우 errorMessage를 송출.

const exists = await User.exists({ $or: [{ username }, { email }] });
if (exists) {
  return res.status(400).render("join", {
    errorMessage: "This username/email is already taken.",
  });
}

4.2 비밀 번호가 다를 경우 errorMessage를 송출.

if (password !== password2) {
  return res.status(400).render("join", {
    errorMessage: "Password confirmation does not match.",
  });
}

로그인은 어떻게 작동할까?

1. form element에 입력된 회원 정보 찾기

const user = await User.findOne({username});

2. 회원 정보가 없을 경우 errorMessage 송출

if (!user) {
  return res.status(400).render("login", {
    errorMessage: "An account with this username does not exists.",
  });
 }

3. 비밀 번호가 틀렸을 경우 errorMessage 송출

const ok = await bcrypt.compare(password, user.password);
if (!ok) {
  return res.status(400).render("login", {
    errorMessage: "Wrong password",
  });
}

4. 사용자 친화적인 환경 만들어 주기

4.1 session을 mongoDB에 저장

app.use(
  session({
    secret: "정준",
    resave: true,
    saveUninitialized: true,
    store: MongoStore.create({ mongoUrl: mongoUrl }),
  })
);
req.session.loggedIn = true;
req.session.user = user;

전체 코드

git page

https://github.com/JUNGJUNSEO/ES6/tree/78c65fd3717df5af507190c676131e505283388e/src

profile
통통통통

0개의 댓글