안녕하세요

MongoDB - 로그인 한 유저만 접속 가능한 페이지 본문

스터디/코딩애플

MongoDB - 로그인 한 유저만 접속 가능한 페이지

sakuraop 2023. 1. 5. 06:39

1. 로그인 해야만 접속 가능한 페이지를 만듭시다.

    <%- include('nav.html') %>
    <h2>tag:h2 마이페이지</h2>

이렇게 만들었어요.

 

 

 

2. middleware로 로그인을 했는지 안했는지 확인합니다.

if (요청.user) 에서 user가 있는지 확인을 하고 있다면 next()를 실행합니다.

const isLogin = (요청, 응답, next) => {
  if (요청.user) {
    next();
  } else {
    응답.send("로그인 안했어요.");
  }
};

 

쿠키에 session id를 찾을 수 있는 문자열이 저장되어 있고,

session data에는 유저의 id가 저장되어 있습니다.

  sessionID: 'DjUvTOd5tVVRNaq2KyHrqAGq8_2vsEsr',
  session: Session {
    cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
    passport: { user: 'test' }
  },

 

 

 

3. middleware 가 next()를 실행시키면 특정 페이지를 보여줍니다.

app.get("/mypage", isLogin, (요청, 응답) => {
  응답.render("mypage.ejs");
});

 

 

 

4. 로그인한 유저의 정보를 DB에서 찾기

id를 이용해 세션을 만들고 쿠키로 보냄 (여기 페이지 클릭 7번 에 있음)

passport.serializeUser(function (user, done) {
  done(null, user.id);
});
 
 
 
 
 

DB에서 user.id로 유저를 찾고, 유저 정보를 반환할 차례( deserializeUser )

=> 바로 위의 serializeUser 메서드에서 done의 인자로 넣은 user.id
deserializeUser의 첫번째 인자(여기서는 아이디)로 들어오게 된다.
 
 
 
passport.deserializeUser(function (아이디, done) {
  db.collection("login").findOne({ id: 아이디 }, (에러, 결과) => {
    done(null, 결과);
=> done의 두번째 인자, 결과에 찾은 user의 정보가 저장됨
  });
});

 

 

 

찾은 유저의 정보를 전달하면 여기서부터는 아는 부분

=> 바로 위의 deserializeUser 메서드에서 done의 인자로 넣은 결과가 요청.user에 담기게 된다.

app.get("/mypage", isLogin, (요청, 응답) => {
  요청.user
  응답.render("mypage.ejs");
});

 

찾은 데이터

{ _id: 63b56ff5a1b5f18beccc6856, id: 'test', password: 'test' }

 

 

 

user 에 유저 정보를 담아서 mypage.ejs로 건네고 렌더링하도록 합니다.

app.get("/mypage", isLogin, (요청, 응답) => {
  console.log(요청.user);
  응답.render("mypage.ejs", { user: 요청.user });
});

 

html 가서 출력하도록 하면

    <h2>tag:h2 마이페이지</h2>
    <p>아이디: <%= user.id %></p>
    <p>비밀번호:<%= user.password %></p>

아이디뿐만 아니라 비밀번호까지 잘 들고 왔습니다.