로그아웃구현
로그아웃을 구현하는 작업은 상당히 간단합니다.
passport를 통해 로그인 했기 때문에 logout매소드를 호출하고
서버에 있는 세션을 삭제하면
로그아웃이 완료됩니다.
먼저 라우터를 만들어 볼까요?
//routes/user.js
router.post('/logout',(req,res)=>{
req.logout();
req.session.destroy();
res.send('로그아웃 성공')
})
완료되었습니다.
추가적으로 로그아웃은 로그인된사용자만,
로그인과 회원가입은 로그인되지 않은 사용자만 사용할 수 있도록
로그인 유무를 확인하는 커스텀 미들웨어를 만들어보겠습니다.
routes폴더에 middlewares.js를 만들고 다음과 같이 작성합니다.
//로그인 되어있는 경우
exports.isLoggedIn = (req, res, next) => {
if (req.isAuthenticated()) {
//passport에서 제공하는 로그인 유무 확인
next(); //다음 미들웨어로
} else {
res.status(401).send("로그인이 필요합니다.");
}
};
exports.isNotLoggedIn = (req, res, next) => {
if (!req.isAuthenticated()) {
next();
} else {
res.status(401).send("로그인하지 않은 사용자만 접근이 가능합니다.");
}
};
isAuthenticated()는 passport에서 제공하는 로그인 유무를 확인하는 메소드입니다.
next()를 실행하면 다음 미들웨어로 넘어가지만, ()안에 뭔가가 있다면, 다음 에러처리 미들웨어로 넘어갈 수 있습니다.
에러처리 미들웨어
에러처리 미들웨어로 간다는것은 다음 미들웨어로 가지 않고, app.js router다 거치고 마지막에 있는 미들웨어로 가는 것인데 형식은 다음과 같습니다.
app.use((err,req,res,next)=>{
})
여기서는 에러페이지를 커스텀 할수 있지만, 기본적으로 express에는 에러처리 미들웨어가 내장되어 있습니다.
마지막으로 위에서 작성한 미들웨어를 적용시켜 주세요
const {isLoggedIn,isNotLoggedIn} =require('./middlewares')
router.post('/logout',isLoggedIn,(req,res)=>{
req.logout();
req.session.destroy();
res.send('로그아웃 성공')
})
사실 지금까지 작성한게 맞기는 하고, 동작도 하지만, 로그인 했는데 안했다고 나오고, 그런 경우가 있을 것입니다. 이런건 다다음 시간 쿠키공유에서 해결해보겠습니다.
Last updated
Was this helpful?