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

matromen님의 프로필 이미지

작성한 질문수

React로 NodeBird SNS 만들기

세션 갱신 문의 건

21.02.24 00:32 작성

·

283

0

 세션 갱신을 구현 중  도움을 주셨으면 합니다.

- CSR 랜더링 시에는 정상적으로 백엔드 및 프론트 둘다 쿠키 expires가 변경 되는 것을 확인 하였으나

- SSR 랜더링 시에는 const cookie = ctx.isServer ? ctx.req.headers.cookie : ''; 

    통한 request headers에 Cookie 전달 확인은 되었으나

    response header에  set-cookie가 없고

    expires가 변경 되지 않습니다.

백엔드 설정

app.use(session({
    resave: true,
    saveUninitialized: false,
    rolling: true,
    secret: process.env.COOKIE_SECRET,
    cookie: {
        httpOnly: true,
        secure: false,
        maxAge: 60*60*1000,
    },
    name: 'kbk'
}));

프론트 설정

    server.use(session({
        resave: false,
        saveUninitialized: false,
        secret: process.env.COOKIE_SECRET,
        cookie: {
            httpOnly: true,
            secure: false,
        },
        name: 'kbk'
   }));

브라우저에서 Network탭 확인 시

 - csr 랜더링

     요청주소 :  axios를 통한 서버쪽 주소 요청

 - ssr 랜더링 시

    요청주소: 프론트 주소

답변 7

0

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

2021. 02. 24. 13:21

지금 요청은 saga 액션으로 만들지 마시고, 그냥 getServerSideProps에서 axios 요청을 바로 보내세요. 그래야 response에 접근할 수 있습니다.

0

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

2021. 02. 24. 11:03

말씀하신 프론트 서버에서 axios로 백엔드에 요청을 보내면 응답 헤더에 set-cookie는 확인이 됩니다.

그대로 다시 브라우저에 set-cookie 응답 헤더로 보내라고 하시는데

  return axios.get(`/print?${paramUri}`, {
        withCredentials: true
   }).then((result) => ?.writeHeader('Set-Cookie', result.headers['set-cookie'][0]);

saga에서 서버로 부터 결과 값을 redux의 상태 값을 변경하고

페이지가 랜더링 되면 useSelector를 통해 redux status에 값을 가지고 와서 페이지를 재 랜더링 하는 것으로 알고 있는데요.

그럼 ssr의 경우 위 행위가 서버들에서 이루지는 건데

어떻게  saga에서 브라우저에 응답을 줄 수있는지 모르겠습니다.

아니면 header값만 변경 하는 건지? , saga에서 Http response객체는 따로 만들어야 하는지?

정말 모르겠습니다.

도와 주세요~

0

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

2021. 02. 24. 01:06

프론트 서버에서 axios로 백엔드에 요청을 보내면 응답 헤더에 set-cookie가 들어있을텐데 그걸 그대로 다시 브라우저에 set-cookie 응답 헤더를 보내주면 됩니다.

브라우저에서 프론트서버로 쿠키를 보냈을 때 그걸 다시 axios에 넣어 백앤드로 여청보내는 것처럼요.

프론트 서버는 이처럼 브라우저와 백엔드를 사이에 전달만 해주는 역할입니다.

0

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

2021. 02. 24. 01:03

프론트서버 - 백엔드서버  구조에서 보통 세션운영을 어떻게 하는지 궁금 합니다.

0

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

2021. 02. 24. 00:56

ssr시에는 set-cookie가 없죠. set-cookie는 브라우저 대신 프론트서버에서 받았으니까요. 프론트서버에서 다시 브라우저로 set-cookie 해줘야합니다.

0

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

2021. 02. 24. 00:53

ssr 시  set-cookie 확인 안됨

csr 시 백엔드로 부터 set-cookie 확인

0

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

2021. 02. 24. 00:37

기본적으로 프론트 서버는 쿠키를 설정하지 않고 브라우저와 백엔드간의 쿠키를 서로 전달해주는 매개체 역할을 하면 됩니다. ssr시 set-cookie를 어떻게 확인하셨나요?

matromen님의 프로필 이미지

작성한 질문수

질문하기