에러 나오는 이유
passport.js 버전이 올라감에 따라 사용법에 변경이 있었기 때문입니다.
해결법
아래와 같이 코드를 변경하면 정상동작합니다.
router.get('/logout', (req, res, next) => {
req.logOut(err => {
if (err) {
return next(err);
} else {
console.log('로그아웃됨.');
res.redirect('/');
}
});
});
자세한 설명
https://medium.com/passportjs/fixing-session-fixation-b2b68619c51d
위 포스트에서 내용 일부발췌하여 간단한 번역을 덧붙여둡니다.
The other major change is that that req.logout()
is now an asynchronous function, whereas previously it was synchronous. For instance, a logout route that was previously:
이번 업데이트로 원래는 동기 함수였던 req.logout()이 비동기 함수가 됐습니다. 바로 아래의 코드는 동기함수였을 시절 쓰던 방식입니다.
app.post('/logout', function(req, res, next) {
req.logout();
res.redirect('/');
});
should be modified to:
이젠 위 코드처럼 쓰지 말고, 아래처럼 써야 잘 동작합니다.
app.post('/logout', function(req, res, next) {
req.logout(function(err) {
if (err) { return next(err); }
res.redirect('/');
});
});
...
This improves the overall security posture of any app using Passport for authentication.
바뀐 사용법은 보안(security)상의 이점이 있습니다.
감사합니다
답글