세션 구현 시도

 

https://codelist.tistory.com/62

 

[Vue.js, Node.js] 쿠키로 로그인/로그아웃 구현

여는 글 쿠키는 보안상 좋지 않아서 쿠키만으로는 로그인/로그아웃을 구현하기엔 좋지 않다. 대부분은 세션+쿠키를 사용하는 것 같다. 그래서 나도 처음엔 세션부터 구현하려고 했다. 세션에는

codelist.tistory.com

 

 

이제 DB 삭제가 되기 때문에 내가 세션을 자체적으로 구현하려고 했다.

 

로그인 시 DB 생성 -> DB 생성 시 TTL 사용해서 지정 시간 뒤에 자동으로 세션 값 삭제

 

근데 이틀 동안 TTL에서 막혀서 그냥 라이브러리 써야겠다 싶었는데 1번 글에서 만났던 문제를 또 마주하게 됐다.

 

 

        req.session.userinfo = users.phone
                         ^

TypeError: Cannot read property 'userinfo' of undefined

이런 에러가 나는데 다른 사람들은 잘만 사용하던데 난 왜 안될까...

 

일단 req.session 자체가 undefined라 키도 당연히 오류나는 것 같아서 req.session undefined 구글링부터 해보고 있다...

 

 

 

 

+22.1.4 해결

 

 

req.session undefined를 구글링하고 있는데 아래 포스팅을 보게 됐다.

 

https://jaroinside.tistory.com/15

 

1. express-session

express 사용시 express-session 을 사용하는 경우가 많습니다. 이번에 한 블로그의 공부를 따라하던중, express-session 을 사용하였는데, 로그인 구현 관련이었습니다. 로그인을 하면서 session을 저장하기

jaroinside.tistory.com

 

그래서 순서를 바꿨더니 페이지 접속 시 에러가 생겼다.

 

TypeError: Secret string must be provided.

 

사실 이 에러는 처음 보는 에러가 아니었다.

 

세션 이것저것 해보면서 몇 번 만나봤던 에러인데 나는 분명히 secret을 명시해뒀기 때문에 그냥 이상하고 뜬금없는 에러라고 생각해서 무시했는데 이번에는 저 에러에 대해서 구글링을 해봐야겠다는 생각이 들었다.

 

그리고는 아래 글을 보고 해결할 수 있었다.

 

https://stackoverflow.com/questions/38326191/node-js-session-login

 

Node.js session login

Node.js does not seem to be remembering my session. I am using Express with cookie-parser and express-session as middleware. In my application, I use Mongo to keep usernames and passwords. The

stackoverflow.com

 

cookieParser 설정에 대한 내용인데 먼저 글을 읽어보고 나는 cookieParser에 딱히 설정한 게 없을텐데..? 하면서 내 코드를 봤더니...

 

app.use(cookieParser({sameSite : 'none', secure : true}));

 

secure가 true로 되어있었다.

 

배포하고나서 쿠키 안될 때 건드렸던 부분인데 여기서도 secure가 문제일 줄 몰랐다.

 

그래서 secure를 지웠으나 그래도 똑같은 에러가 생겼는데 에러를 다시보면 secret을 제공해야한다- 라는 내용이므로 아래처럼 작성하니 session이 작동했다.

 

app.use(cookieParser('secret'));

 

 

session이 안되는 건 당연히 session 문제일 줄 알았는데 cookieParser가 문제일 줄 몰랐다.

 

 

기존 코드도 다시 보고 없던 에러가 생기면 유심히 봐야겠다...

 

 

++session store 설정 참고 코드

https://kimjingo.tistory.com/43