본문 바로가기

코딩/NodeJS

nodejs에서 mypage 구현하기

반응형

1. 개요

  • 회원가입이랑 로그인 기능 구현했으니까
  • mypage에 접속할 수 있도록 만들고 싶음
  • mypage는 회원 정보를 바탕으로 로그인 한 회원의 개인정보가 담긴 페이지를 보여줌

2. 코드

(1) mypage.ejs

  • mypage.ejs파일 만들어줍시다
<!DOCTYPE html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, shrink-to-fit=no"
    />

    <!-- Bootstrap CSS -->
    <link
      rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
      integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N"
      crossorigin="anonymous"
    />

    <title>Hello, world!</title>
  </head>
  <body>
    <%- include('nav.html') %>

    <p><%= 사용자.id %>의 마이페이지입니다</p>

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) -->
    <script
      src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
      integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
      integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
      crossorigin="anonymous"
    ></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" crossorigin="anonymous"></script>
    -->
  </body>
</html>

 

  • 적당히 꾸며주시면 됩니다

(2) server.js

// 로그인한 유저의 세션 아이디를 이용해 DB에서 개인정보 찾아주는 코드(개인 정보 페이지 접속시 실행)
// db에서 유저 아이디를 이용해서 유저를 찾고, 유저 정보를 done(null, 결과)에전달해줌
// 참고로 '아이디'라는 변수는 serializeUser코드의 'user.id'변수에 들어있는 값과 동일
passport.deserializeUser(function (아이디, done) {
  db.collection("login").findOne({ id: 아이디 }, function (에러, 결과) {
    done(null, 결과);
  });
});
  • deserializeUser 코드는 브라우저에 저장된 세션 아이디를 이용해 DB에서 개인정보를 찾아서 변수에 담아줌
  • 결국 deserializeUser 코드는 ‘/mypage’로 요청이 들어오면 요청.user에 개인정보 데이터를 꽂아줌
// 마이페이지 요청 코드
// '로그인했니' 라는 미들웨어 포함하기
app.get("/mypage", 로그인했니, function (요청, 응답) {
  console.log(요청.user);
  응답.render("mypage.ejs", { 사용자: 요청.user });
});
  • get 요청을 통해 서버에 ‘/mypage’ 라는 URL로 요청이 들어오면 mypage를 렌더링 해줌
  • 이때 ‘사용자’라는 변수에 미들웨어를 통해 deserializeUser 코드로 찾은 데이터를 담아줌
// 로그인 했는지 알려주는 미들웨어 코드
function 로그인했니(요청, 응답, next) {
  // 요청.user가 있는지 검사해줌
  // 로그인 후 세션이 있으면 요청.user가 브라우저에 존재 함
  if (요청.user) {
    // 만약 요청.user가 있으면 통과시킴
    next();
  } else {
    응답.send("로그인안하셨는데욧?");
  }
}
  • 서버로 GET 요청 들어오면 세션유무를 따져서 로그인 했는지 검사해줌
  • 만약 로그인 했으면 GET 코드 마저 실행시켜주고
  • 로그인 안했으면 로그인 안했다고 알려줌
반응형