[Node JS] # Log in

2564 단어 node jsnode js

User

1. 유효성 검사

  • 중복되는 이메일이나 아이디 등의 에러 해결
  • Unique로 설정할 필드에서 중복되는 문제 발생 시 DB에서 에러 발생
  • 구현
if (password !== password2) {
    return res.render("join", {
      pageTitle,
      errorMessage: "Password confirmation does not match",
    });
  }
const exists = await User.exists({ $or: [{ username }, { email }] });
  if (exists) {
    return res.render("join", {
      pageTitle,
      errorMessage: "This username/email is already taken.",
    });
  }

2. Status Codes

  • 유효성 검사 후, 중복이나 잘못된 경우로 가입을 해도 크롬은 정상적 작동으로 인식
  • Status code 때문인데, 별다른 요청이 없으면 node는 status code 200을 전달 (OK code)
  • 여러가지 status code 참조
  • https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
  • 구현
    res.status(400).render("404", { pageTitle: "Video not found." });

3. Login

  • 사용자가 입력하는 패스워드와 DB에 저장된 해싱된 패스워드를 비교
  • Bcypt를 이용하여 사용자가 입력한 패스워드를 해싱하여 비교
const ok = await bcrypt.compare(password, user.password);
  if (!ok) {
    return res.status(400).render("login", {
      pageTitle,
      errorMessage: "Wrong Password",
    });
  }

4. Session & Cookie

  • 세션: 백엔드와 브라우저 간에 어떤 활동을 했는지 기억하는 것, history, memory
  • Stateless: 무연결 상태, 한 번 연결되고 끝나는 것, 둘 사이에 state가 없음
  • 세션이 없으면 로그인을 해도 그냥 홈으로 redirect 되고 끝남
  • 그래서 유저가 누군지 알 수 있도록 유저가 로그인하면 텍스트를 같이 보냄
  • 쿠키: 유저가 웹사이트에 접속할 때마다 브라우저가 자동으로 전송하는 텍스트
  • 백엔드에서는 http request를 보내는 모든 유저를 세션에 담아 저장한다. (ex. 브라우저를 id로 저장하는 방식으로)
  • 서버를 재시작할 때마다 세션은 초기화 됨
  • 백엔드가 세션을 잊지 않도록 DB와 연동해야 함
  • 서버 --- 세션 id -- 브라우저 --- 세션 id --- 쿠키 저장,
  • 브라우저 --- 쿠키에 저장된 세션 id -- 서버: 브라우저가 보낸 id와 가진 세션 id 비교
  • 세션을 이용한 유저 로그인 구현
    req.session.loggedIn = true;
    req.session.user = user;
  • 로그인 유지

Server.js

app.use(
  session({
    secret: "Hello!",
    resave: true,
    saveUninitialized: true,
  })
);
app.use(localsMiddleware);

Middlewares.js

export const localsMiddleware = (req, res, next) => {
  console.log(req.session);
  res.locals.loggedIn = Boolean(req.session.loggedIn);
  res.locals.siteName = "Wetube";
  console.log(res.locals);
  next();
};

좋은 웹페이지 즐겨찾기