안녕하세요
MongoDB - 로그인 한 유저만 접속 가능한 페이지 본문
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>
아이디뿐만 아니라 비밀번호까지 잘 들고 왔습니다.
'스터디 > 코딩애플' 카테고리의 다른 글
MongoDB - Query String 으로 검색기능 구현 (0) | 2023.01.06 |
---|---|
MongoDB - env 환경변수로 가변적 데이터나 숨길 데이터 다루기 (0) | 2023.01.05 |
MongoDB - 세션방식 로그인 기능 구현 (0) | 2023.01.05 |
MongoDB - 수정하기 PUT요청 (updateOne) (0) | 2023.01.04 |
MongoDB - server에 css, 부트스트랩 약간, ejs로 html 조립식 (0) | 2023.01.04 |