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}`)
}
})
})