const authRouter = require('./routes/auth')
~
~
app.use('/auth', authRouter);
done 함수
-> done(1, 2, 3)
- 1번 인자: server error, 일반적으로는 null을 넣고 에러인 경우는 try-catch로 따로 처리
- 2번 인자: 로그인 성공한 경우의 객체, 실패했다면 false, 성공했다면 해당 객체
- 3번 인자: 로그인 실패 시의 메세지
router.post('/logout', isLoggedIn, (req, res) => {
req.logout();
req.session.destroy();
res.redirect('/');
});
logout 라우터 만들고 req.logout 하면 서버에서 세션 쿠키가 사라짐 (서버에서 세션 쿠키가 사라지면 로그인이 풀리는 것과 동일)
로그인 한 상태로 회원가입을 진입하고, 로그인이 안돼있는데 로그아웃을 하는 등의 예외상황을 만들지 않기 위한 미들웨어를 직접 구현한 뒤 auth.js의 각 라우터들에 삽입
//middleware를 직접 만들기
//지금 로그인 상태인지 판단
exports.isLoggedIn = (req, res, next) => {
if(req.isAuthenticated()) { //true면 로그인 되어있는 상태임
next();
}
else {
res.status(403).send('로그인 필요');
}
}
//로그인 안한 상태인지 판단
exports.isNotLoggedIn = (req, res, next) => {
if(!req.isAuthenticated()) {
next();
}
else {
const message = encodeURIComponent('로그인한 상태입니다.');
res.redirect(`/?error=${message}`);
}
};
카카오로 로그인하기 는 따로 글을 작성했다
모바일 환경 (android, ios)에서는 쿠키를 사용할 수 없다. 따라서 직접 구현해서 사용해야 함!!!