저도 세션 인증이 반영된 모습을 새로고침 해줘야만 한다던가 FIleStore의 파일 읽고 쓰는 타이밍, 권한 등등의 문제로 오류 로그가 간헐적으로 발생해서
asekang님 말씀을 기초로 express session store들 중 하나로 제공되는 connect-loki 미들웨어를 설치하여 해결했습니다.
우선 기존에 FIleStore 방식으로 작성된 main.js의 코드를 보면
## main.js ####################
var session = require('express-session')
var FileStore = require('session-file-store')(session)
...
...
...
app.use(session({
store: new FileStore(),
secret: 'blahblah~~~@#$',
resave: false,
saveUninitialized: true
}))
...
...
...
#################### main.js ##
요런 형태인데 일단 session-file-store는 잠시 옆으로 치워놓고
아래 모듈을 추가적으로 설치하고 코드 몇 줄 교체하니 깔끔하게 잘 작동하네요~
@@ 명령 프롬프트(도스창)에서 @@@@@
npm install connect-loki -save
기존 FileStore(sesson-file-store) 사용할 때
pm2 start main.js --watch --ignore-watch="data/* sessions/*" 실행해줘야
sessions 디렉토리 밑에 나타났다 사라지고 바뀌는 파일들을 무시했는데
Loki 적용 후에는 session-store.db 라는 파일이 프로젝트 루트 디렉토리 밑에 생성되기 때문에
pm2 start main.js --watch --ignore-watch="data/* session-store.db" 요릏게 바꿔서 실행해주셔야
세션 관련된 동작이 일어날 때마다 was가 재기동되는 상황을 막을 수 있습니다.
그리고 여담이지만
connect-loki 설치할 때 lokijs 어쩌고 하면서 오류가 나던 게 제 상황인데
어쨌든 최종적으로 다 설치해놓고 connect-loki의 package.json을 열어보니 lokijs가 의존 모듈로 엮여있어
필요하면 lokijs 까지 알아서 설치를 했어야 됐을텐데
왜 오류가 났던건지 모르겠네요 ㅎㅎ..
FileStore 의 파일 쓰기 작동 방식이 Windows 와 Unix(Linux) 방식과 틀려 작동이 상이하게 된다고 나오네요(Win 7에서는 해결되었는데 Win10 에서는 여전히 오류 발생한다고 Google 검색)
가장 단순히 해결하는 방법은 session-file-store를 사용하지 않고 connect-loki 를 사용하면 패스포트 예시 그대로 작업해도 되고 여기서 설명하는 그대로 작동되는 것을 확인할 수 있습니다. connect-loki 는 디렉토리 루트에 session-store-db 파일을 만드는데 여기에 passport 항목을 보면 로그온 성공 시 사용자 detail 을 확인할 수 있습니다.
저는 pm2 나 nodemon 안쓰고 콘솔에서 node main.js 이렇게 껐다 키면서 강의를 진행해 왔는데요.
밑에 분 처럼 로그인 했을때 닉네임이랑 로그아웃 버튼으로 바로 안바뀌는 현상이 나타나네요. 새로고침을 해야 정상적으로 나타납니다... 문제 해결 방법이 있을까요?
그런데 response.redirect('/')로 홈으로 다시 돌아올때,
다시 요청을 보내면서 request header에는
이미 지워진 파일이름에 해당하는 세션아이디를 쿠키값으로 여전히 가지고 있기 때문에,
이미 지워진 파일을 다시 찾으려고 하기에 콘솔에서 파일을 찾을 수 없다고 나오는 것입니다.