inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React로 NodeBird SNS 만들기

자동 로그인 구현 질문

640

김웅

작성한 질문수 4

0

안녕하세요
자동 로그인을 구현해보려고 하는데 몇주째 안되고 있어서 질문 드립니다..

계정 정보를 쿠키에 암호화하여 저장해서 자동 로그인을 구현하려고 하고 있습니다.
useEffect 에서 쿠키 확인 후에 dispatch 시키면 로그인 쿠키도 잘 넘어오고 정상적으로 로그인이 되는데요,

SSR에서 구현하려고 _app.js 에 getInitialProps 안에 코드를 넣으면 될 것 같아서

const auto = ctx.req.cookies.auto JSON.parse(ctx.req.cookies.auto) : null;
ctx.store.dispatch({
type: LOG_IN_REQUEST,
data: {
        auto.email,
        auto.password
  }
});

대략 이런식으로 넣어서 사용하려고 했는데 유저 정보는 넘겨 받지만 서버쪽이나 브라우저에서 로그인을 인식하지 못하고 로그인 쿠키값도 넘어오지 않아서 axios.defaults.withCredentials = true; 이 값을 넣어도 안되더라구요..

1. 이 방법이 잘 못된 방법인가요?..

2. express session에서 쿠키값을 넘겨받지 못하고 로그인 되지 않는 이유가 무엇인가요?..

react javascript

답변 7

0

제로초(조현영)

저도 전체 코드를 보지 못하여 정확한 원인 분석은 어렵습니다. 다만, 제 소스코드 ch7이나 ch8을 클론해서 비교해보시면 좋을 것 같습니다. 걔네 둘은 getInitialProps로 SSR을 하고 있습니다.

0

김웅

결국에는 getInitialProps 쪽에서 처리하는게 아닌, useEffect를 사용하여 마운트 된 후에 로그인을 시도하는 방식으로 처리 했었는데요...

혹시 처음부터 서버쪽에서 로그인을 시킬 수 있게 자동 로그인을 구현할 방법이 없을까요?..

_app.js 파일의 getInitialProps 안에서 dispatch 시켜도 로그인 처리가 되지 않습니다..
검색해보니 SSR 쪽에선 로그인이 안되는 것 같은데 다른 방법을 도저히 못찾았습니다ㅜㅜ

0

제로초(조현영)

혹시 로그인 라우터에서 프론트엔드로도 쿠키를 다시 보내나요? 백엔드에 로그인할 때 쿠키가 저장되었다면 그걸 다시 프론트로도 보내서 백엔드와 프론트엔드 쿠키를 일치시켜야 합니다. 백엔드와 프론트엔드 주소로 각각 들어가서 개발자도구에서 Application -> Cookie에서 쿠키가 제대로 들어갔는지 확인해보셔야 합니다.

0

김웅

if(ctx.isServer){
    var isLogined = ctx.req.cookies.[login session cookie name] ? true false;
    var auto = ctx.req.cookies.[auto login cookie name] JSON.parse(ctx.req.cookies.[auto login cookie name])
: null;
    if(!isLogined && auto){
      var bytes1 = CryptoJS.AES.decrypt(auto.emprocess.env.COOKIE_SECRET);
      var bytes2 = CryptoJS.AES.decrypt(auto.paprocess.env.COOKIE_SECRET);
      var email = JSON.parse(bytes1.toString(CryptoJS.enc.Utf8));
      var password = JSON.parse(bytes2.toString(CryptoJS.enc.Utf8));
      ctx.store.dispatch({
        type: LOG_IN_REQUEST,
        data: { emailpassword }
      });
    }
 }

이미 로그인이 되었는지 구하고, 자동 로그인 쿠키값도 구해서 CryptoJS로 암호화된걸 해제하여 dispatch로 보내는 식으로 코드를 짜보았지만 처음 로드 시에 로그인이 된 것 처럼 나오지만 글을 쓰거나 페이지를 이동했을 때 로그인이 되지 않았다고 나오네요..

0

제로초(조현영)

로그인 라우터는 req.isAuthenticated가 없을텐데 어떤 라우터에 req.isAuthenticated 미들웨어가 붙어있나요?

0

김웅

네. 로그인 라우터는 모두 이렇게 만들어져 있는 라우터를 사용하고 있습니다.

router.post('/login', (reqresnext=> {
    passport.authenticate('local', (erruserinfo=> {
...

dispatch코드를 getInitialProps 여기에 넣었을 때, passport.authenticate를 성공하여 유저의 정보는 가져오지만 세션이 생성되지 않는 것 같습니다

req.isAuthenticated() 이 코드에서 막히는 걸 보면 로그인이 되지 않는 것 같습니다..

0

제로초(조현영)

자동로그인을 할 때 라우터에서 passport.authenticate를 진행하나요? passport를 거치지 않으면 로그인 자체가 안 됩니다.

next 10 이상에서는 redux dev tool 구동이 안되나요?

0

272

1

세션 갱신 문의 건

0

483

7

배포 진행 후 Highlight updates components render 표시

0

445

1

똑같은 기능을 하는 테이블

0

447

4

관계형

0

312

2

프론트 서버를 이용하지 않는경우

1

299

3

인피니트 스크롤링 사용시 오류

0

278

0

계속 이런에러가 떠서 해결하기는 했는데 어떤 의미인지 모르겠습니다.

0

434

2

req.user가 언제 생성되나요??

0

330

2

Cannot read property 'id' of null 에러

0

333

1

리트윗한 게시글 불러오는 sequelize

0

252

1

result.data에서 images인 이유

0

281

2

takeLatest에 대한 질문입니다.

1

342

2

프론트에서 express를 사용하지 않을때 동적라우팅

0

501

6

getInitialProps가 클라이언트에서 수행되는 이유?

0

258

1

리로드하면 팔로우 언팔로우 값이 초기화 되는 문제입니다.

0

445

2

스타일드 컴포넌트와 className을 통한 스타일 적용의 차이에 대해 궁금합니다

0

585

2

할인 쿠폰 사용이 안되는되요 (848-f9af83f183e3)

0

365

1

nodejs mvc 패턴

0

975

4

사용하고 보니, 람다 구성이 궁금합니다!

0

266

1

제로초님

0

445

1

새로고침 로그인 풀림 문제.

0

247

1

안녕하세요. 강의 너무 감사합니다

0

157

1

제로초님

0

170

1