22.12.23

Han Lee·2022년 12월 23일
0

TIL

목록 보기
21/43

req.tokenObject가 못나가는 이유

어제 req.tokenObject가 왜 못나가는 알았다. -> 결론은 route안에서 선언한 tokenObject는 지역변수 이기에 route->app->middleware로 진행되는 내 코드의 동작에서는 route 밖으로 넘어가는 순간 tokenObject는 없는 존재가 되어버려서 undefind가 나오게 되는 것이다.
내가 이것을 생각을 못했던 이유는 jwt토큰을 그냥 사용할 때 middleware에서 req.userId로 유저의 id값을 넘겨준적이 있는데
이때 이것이 가능했던 이유는 미들웨어는 전역변수를 담을 수 있기 때문이다.
req.userId는 next()에 의해 다음 미들웨어로 넘어간다.
-> next()는 자신이 포함된 요청을 http로 보내는게 아니라 다음 미들웨어로 요청을 넘겨준다.
미들웨어에서 전역변수는 res.locals.변수 = 할당값이다.
받을 때는 res.locals로 받으면 되는데 object타입으로 넘어오니
let {변수} = res.locals 로 받자.
-> 문제의 원인은 전역,지역 변수를 몰랐기에 생긴 문제였고 미들웨어의 next()가 어떻게 작동이 되는지 이해를 못했기에 생긴 문제였다.

해결에 도움을 준 https://abangpa1ace.tistory.com/84

cookie maxAge

jwt토큰의 expiresIn이 만료기간이기에 지정한 시간이 지나면 쿠키가 사라지는 줄 알고 로그인 확인을 쿠키가 있는지 없는지로 구분을 했는데.....
쿠키는 따로 지우지 않는한 굉장히 오래 살아있는 것을 브라우저를 통해 보게되었다.
지금까지 쿠키를 계속 덮어쓰기 형태로 진행이 되고 있다는 것을 알게 되었다.

res.cookie('toeken', token, { maxAge: 35000 })

쿠키를 생성 할때 옵션으로 maxAge를 설정해서 시간이 지나면 쿠키가 소멸이 될 수 있게 했다. 35000은 1000이 1초여서 35초라는 뜻이다.

중복 로그인 확인

로그인을 확인하는 법을 고민을 하다 튜터님에게 물어보니 2가지를 알려주셨는데 로그인 했을 때 접속기록을 true/false로 db에 저장을 한 뒤 비교하는 방법과 cookie나 jwt토큰이 만료가 되었는 지를 비교해서 로그인 확인하는 방법을 알려주셨다.
1. true/false -> user테이블에 접속유무 컬럼을 추가해서 true/false로 저장을 한뒤 비교하게 하는 방법으로

if (user.loginAt === "true")

true이면 false로 바꾸고 return으로 나가게 했다.
문제는 기준이 루트를 실행할 때 여서 더블 클릭을 하면 ture->false->true가 되어서 중복을 거르지 못했다.
2. 유효성 확인 지금은 token이 만료가 되지 않으면 토큰에 정보가 계속 존재하게 되니

 if (authToken)

token이 여전히 유효성이 있으면 return을 출력하게 했다.
문제 : 유효성 검사는 정확히 시간의 만료만 표시하지 않기 때문에 시간의 만료와 토큰이 잘못 되었다는 것을 분류할 수 있는 추가 조건이 필요하다

use strict -> 엄격모드

MVC 패턴

내꺼 보다가 MVC패턴으로 작성된 코드를 보니 현타가 온다.
보기에 깔끔하고 어디서 찾기가 쉽다.
Model - View - Control
모델: 데이터와 비즈니스 로직을 관리합니다.
뷰: 레이아웃과 화면을 처리합니다.
컨트롤러: 명령을 모델과 뷰 부분으로 라우팅합니다.

담주 공부해봐야 하는 부분...

profile
렌덤형 인간

0개의 댓글