
passport local 전략으로 로그인 테스팅을 하는중 이상한 이슈를 발견했다.
이슈는 로그인을 성공했는데도 불구하고 req.user가 있었는데도 불구하고 리다이렉션시 로그인했던 세션이 사라진것이다. 구글링을 통해서 사례를 찾아보려했는데 개인적으로 레퍼런스가 잘 나오지 않았다.
이 레퍼런스통해서 해당이슈의대한 해결법을 확인했다....근데 좀 억울했던건 이미 알고 있던 함수긴 했다.
req.session.save()는 생활코딩에서도 언급이 되었었던 함수지만 passport 문서에는 해당 내용이 있지 않아서 ... 내부적으로 처리해줬을 것이라 막연히 믿었던게 실수였던거 같다.
해당 함수에 대해서 내부적으로 주석이 이렇게 달려있다.
session이 삭제되거나 변경될 때 로그아웃될 때도 항상 사용하는게 좋겠다.
다른 전략에서도 req.login() 내부 콜백에서 필요시 req.session.save(callback) 을 사용하는 것을 잊지말자.
req.login(user, (err) => {
if (err) {
console.log(err)
next(err)
}
console.log('로그인마지막단계', req.session)
// 여기 이 req.session.save(callback) 내부 콜백에서 redirect를 해줘야 문제가 발생하지 않는다.
req.session.save((err) => {
if (err) {
console.error(err)
next(err)
} else {
res.redirect(`/user/${user.id}`)
}
})
})