inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React로 NodeBird SNS 만들기

5-15. 로그아웃과 사용자 정보 가져오기

deserialize 내부에서 db.User.findOne({..)}

240

이영창

작성한 질문수 4

0

  passport.deserializeUser(async (id, done) => {
    try {
      const user = await db.User.findOne({
        where: { id }
      });
      return done(null, user); // 이 때 req.user에 유저 정보 저장
    } catch (e) {
      console.error(e);
      return done(e);
    }
  });
  local();
};

deserializeUser 의 callback 함수에서 done 으로 넘겨지는 user 데이터는 findOne({ where:  {id}) 로 조회된 데이터인데요. 

이 데이터에는 Followings, Followers 프로퍼티가 포함되지 않습니다. 그러다보니, 5-14에서 발생했던 것 처럼, front/component/AppLayout/UserPorfile 내부 아래 코드에서 에러가 발생하게 됩니다.

import React, { useCallback } from 'react';
import { Card, Avatar, Button } from 'antd';
import { useSelector, useDispatch } from 'react-redux';
import { LOGOUT_REQUEST } from '../../reducers/user';

const UserProfile = () => {
  const { me } = useSelector(state => state.user);
  const dispatch = useDispatch();
  const onLogout = useCallback(() => {
    dispatch({
      type: LOGOUT_REQUEST,
    });
  }, []);
  return (
    <Card
      actions={[
        <div key="twit">
          짹짹
          <br />
          {me.Posts.length}
        </div>,
        <div key="following">
          팔로잉
          <br />
          {me.Followings.length}
        </div>,
        <div key="follower">
          팔로워
          <br />
          {me.Followers.length}
        </div>,
      ]}>
      <Card.Meta
        avatar={<Avatar>{me.nickname[0]}</Avatar>}
        title={me.nickname}
      />
      <Button onClick={onLogout}>로그아웃</Button>
    </Card>
  );
};

export default UserProfile;

  이를 해결하기 위해서는 deserializeUser 에서 login 라우터에서 처럼 데이터를 조회해서 req.user에 저장해야 할 것 같습니다.

아래 코드와 같이 말이죠 

- deserializeUser

passport.deserializeUser(async (id, done) => {
    try {
      const user = await db.User.findOne({
        where: { id },
        include: [
          {
            model: db.Post,
            as: 'Posts',
            attributes: ['id']
          },
          {
            model: db.User,
            as: 'Followings',
            attributes: ['id']
          },
          {
            model: db.User,
            as: 'Followers',
            attributes: ['id']
          }
        ],
        attributes: ['id', 'nickname', 'userId']
      });
      return done(null, user); // 이 때 req.user에 유저 정보 저장
    } catch (e) {
      console.error(e);
      return done(e);
    }
  });
  local();
};

이에 대해 어떻게 생각하시나요?

react javascript

답변 1

0

제로초(조현영)

네 맞습니다. 깃헙에는 코드가 저렇게 되어있습니다.

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

0

272

1

세션 갱신 문의 건

0

484

7

배포 진행 후 Highlight updates components render 표시

0

445

1

똑같은 기능을 하는 테이블

0

448

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

976

4

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

0

266

1

제로초님

0

445

1

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

0

247

1

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

0

157

1

제로초님

0

170

1