강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

dsfsdf님의 프로필 이미지
dsfsdf

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

SSR시 쿠키 공유하기

cookie 공유 질문이요

작성

·

371

0

export const getServerSideProps = wrapper.getServerSideProps(
  async (context) => {
    const cookie = context.req ? context.req.headers.cookie : "";
    axios.defaults.headers.Cookie = "";
    if (context.req && cookie) {
      axios.defaults.headers.Cookie = cookie;
    }
    context.store.dispatch({
      type: LOAD_MY_INFO_REQUEST,
    });
    context.store.dispatch({
      type: LOAD_POSTS_REQUEST,
    });
    context.store.dispatch(END);
    await context.store.sagaTask.toPromise();
  }
);
여기서 쿠키공유를 막기위해
    if (context.req && cookie) {
      axios.defaults.headers.Cookie = cookie;
  }
를 넣어주셨는데 이 조건문없이
export const getServerSideProps = wrapper.getServerSideProps(
  async (context) => {
    const cookie = context.req ? context.req.headers.cookie : "";
  axios.defaults.headers.Cookie = cookie;
    context.store.dispatch({
      type: LOAD_MY_INFO_REQUEST,
    });
    context.store.dispatch({
      type: LOAD_POSTS_REQUEST,
    });
    context.store.dispatch(END);
    await context.store.sagaTask.toPromise();
  }
);
이런식으로 해도 페이지 접속하는 유저마다 cookie가 달라서
변수 cookie는 계속 변하고
axios.defaults.headers.Cookie = cookie; 값이 계속
달라져서 문제가 없을 거 같은데 어떻게 쿠키가 공유 되는건가요?

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

제가 기억하기론 어떤 페이지 중 getServerSideProps를 안 쓰는 페이지가 있을 때 그 페이지에 접속하면 쿠키가 초기화되지 않아서 이전 로그인된 사용자 정보가 유지되었던 문제가 있었고 Cookie가 빈 값일때도 axios가 빈 값은 무시해버려서 문제였었습니다.

if문이 공유를 막는다기보다는 Cookie = ''이 막습니다.

dsfsdf님의 프로필 이미지
dsfsdf
질문자

답변 감사합니다. 한가지 더 궁금한게 있는데

export const getServerSideProps = wrapper.getServerSideProps(
  async (context) => {
    const cookie = context.req ? context.req.headers.cookie : "";
    axios.defaults.headers.Cookie = "";
    if (context.req && cookie) {
      axios.defaults.headers.Cookie = cookie;
    }
    context.store.dispatch({
      type: LOAD_MY_INFO_REQUEST,
    });
    context.store.dispatch({
      type: LOAD_POSTS_REQUEST,
    });
    context.store.dispatch(END);
    await context.store.sagaTask.toPromise();
  }
);
여기서 axios.defaults.headers.Cookie = "";가
await context.store.sagaTask.toPromise(); 아래에 있어줘야 Cookie가 초기화 되는게 아닌가요?
 
    axios.defaults.headers.Cookie = "";
    if (context.req && cookie) {
      axios.defaults.headers.Cookie = cookie;
  }
이런식으로 있으면 axios.defaults.headers.Cookie = ""; 초기화를 해도 밑에 if문에서
cookie를 집어넣어주면 cookie값이 그대로 공유되는게 아닌가요? 제가 어디서 헤매고 있는지
모르겠네요..
제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

if문은 자기의 쿠키를 넣는 것이라 상관 없습니다. 쿠키 초기화는 요청을 보내기 전에 해야 쿠키가 없는 상태로 요청을 보낼 수 있습니다. 사실 뒤에 위치해도 괜찮습니다. 요청보낸 후에 쿠키 싹다 초기화 할 수 있으니까요. 더 나을수도 있겠네요.

일단 기존 쿠키부터 초기화 -> 서버요청이고 쿠키가 있으면 세팅 -> 백엔드서버로 요청

이런 순서입니다.

dsfsdf님의 프로필 이미지
dsfsdf

작성한 질문수

질문하기