Node js cookie 설정시 option sameSite is invalid 오류
유저 로그인 요청이 오면 유저의 ID와 비밀번호를 확인후
jwt 토큰을 생성하여 res.cookie로 사용자의 쿠키에 저장해주려 하였다.
하지만 클라우드 서버 주소로 접속하여 요청을 하면 쿠키가 잘 생성 되었지만
로컬에서 개발중인 localhost에서 빌드된 React에서 요청을 하면 쿠키가 생성되지 않았다.
CORS오류가 의심되었지만 기존에 app.js에 CORS오류 관련 기본 설정을 해두어서
알아보던중 cookie옵션으로 sameSite = 'None'을 주어야 한다는 것을 알게 되었다.
다른 Origin에서도 쿠키를 설정할 수 있도록 하는 것이다.
None 말고도 Strict, Lax가 있다.
기본적으로 Lax가 기본값이다.
따라서 기존의
res.cookie('accessToken', accessToken,{
secure : false, //true : https로, false : http로
httpOnly : true, //js에서 쿠키 접근 불가능
});
에서
res.cookie('accessToken', accessToken,{
secure : true, //true : https로, false : http로
httpOnly : true, //js에서 쿠키 접근 불가능
sameSite: 'None',
});
res.cookie의 옵션을 설정하였다.
httpOnly는 클라이언트에서 js로 쿠키에 접근하지 못하도록 막아 보안을 높이는 것이다.
앞서 말했듯 CORS오류 때문에 sameSite를 None으로 주어야하는데
보안의 위험으로 secure을 true로 설정해야 했다.
클라우드는 https설정이 되어있어 문제가 되지 않았지만 자꾸 오류로
option sameSite is invalid가 나왔다.
그래서 검색하고 알아봤었는데 return err.message를 클라이언트로 던져주기만 하다가
서버에서 err를 찍어보니 나온 cookie관련 파일 링크로가 찾아보니 none이라는 속성이 없고
true(=strict), lax, strict만 있었다.
None이 속성으로 없었다...
express공식문서로가 samesite를 검색하니 4.17버전부터 sameSite none을 지원하였다...
https://expressjs.com/ko/changelog/4x.html#4.17.0
Express 4.x 업데이트 기록
업데이트 기록 4.17.1 - 출시일: 2019-05-25 4.17.1 패치에서 하나의 버그가 고쳐졌습니다. res.status()가 존재하는 Express 4 애플리케이션에서 재귀를 일으키기 때문에 롤백되었습니다. 모든 변경 내역 확
expressjs.com
확인해보니 깔려 있는 express 버전이
"express": "~4.16.1",
이었고 4.17버전이 아니었다...
그것도 모르고 다 따라했는데 왜안되는거지 라며 이틀을 https나 다른 cors관련 설정을 뜯었다.
npm uninstall express
npm install express@4.17.0
명령어를 실행해 다시 깔았다.
다음부터는 공식문서에 바로 검색해야겠다!!