inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

passport로 로그인 에러 시 payload 전달 방법

538

Graham

작성한 질문수 6

1

강사님, 안녕하세요.  

혼자서 해보려다가 도저히 모르겠어서 질문 드립니다. 

로그인 에러 시 각각 상황에 맞는 logInError를 안내하고 싶어서 제작 중인데, 

회원가입할때도 다른 작업할때도 에러나면 payload 값이 잘 나오던데, 

로그인 할때만 에러나면 Payload 값이 undefined 로 나오네요.

 

회원가입한적 없는 아이디일때 "존재하지 않는 이메일입니다"

 

아이디는 있으나 비밀번호가 틀렸을때 "비밀번호가 틀렸습니다"

 

/back/routes/user.js 에서

//SignUp
router.post('/', isNotLoggedIn, async (req, res, next) => {
  try {
    ***
    if (exUser) {
      return res.status(403).json('이미 가입된 아이디입니다.');
    }
    ***
  } catch (error) {
    console.error(error);
    next(error);
  }
});

이렇게 json 형태로 에러 메시지를 적어주면 front로 전달된다고 배웠고, 회원가입이나 다른 호출은 다 잘 출력됩니다.

그런데 login 쪽만 payload(logInError)가 undefined로 나옵니다. (개발자도구 네트워크에서는 메시지가 잘 찍힙니다.)

router.post('/login', isNotLoggedIn, (req, res, next) => {
  passport.authenticate('local', (err, user, info) => {
    ***
    if (info) {
      return res.status(401).json(info.reason);
    }
    ***
  })(req, res, next);
});

 

/back/passport/local.js

***
module.exports = () => {
    passport.use(
        new LocalStrategy(
          ***
            async (userid, password, done) => {
                try {
                    ***
                    if (!user) {
                        return done(null, false, { reason: '존재하지 않는 이메일입니다!' });
                    }
                    ***
                    return done(null, false, { reason: '비밀번호가 틀렸습니다.' });
                } catch (error) {
                    ***
                }
            }
        )
    );
};

 

//회원가입 페이지

 

/front/reducers/user.js

 

//회원가입 페이지

 

//로그인 페이지

회원가입과 다르게 로그인은 passport가 쓰여서인듯 한데,

에러 났을때 payload 값을 가져오게 할 방법이 있을까요?

passport payload redux react nodejs express Next.js

답변 1

0

제로초(조현영)

toolkit이면 createAsyncThunk를 보셔야 합니다. 로그인과 회원가입 간에 비교해보세요.

0

Graham

/front/actions/user.js

//회원가입
export const SIGN_UP = createAsyncThunk(
  'user/signup',
  async (data, { rejectWithValue }) => {
    try {
      const response = await axios.post('/user', data);
      return response.data;
    } catch (error) {
      return rejectWithValue(error.response.data);
    }
  }
);

//로그인
export const LOG_IN = createAsyncThunk(
  'user/login',
  async (data, { rejectWithValue }) => {
    try {
      const response = await axios.post('/user/login', data);
      return response.data;
    } catch (error) {
      return rejectWithValue(error.reponse.data);
    }
  }
);

회원가입, 로그인 거의 동일한 코드 입니다.

제가 놓치고 있는 부분이 있을까요?

0

제로초(조현영)

잘 보시면 catch 부분에 오타가 있습니다.

0

Graham

아... 민망하네요. 이런 초보적인 실수를... 앞으론 좀더 꼼꼼히 보겠습니다. 

정말 감사해요.

넥스트 버젼 질문

0

78

2

로그인시 401 Unauthorized 오류가 뜹니다

0

89

1

무한 스크롤 중 스크롤 튐 현상

0

175

1

특정 페이지 접근을 막고 싶을 때

0

103

2

createGlobalStyle의 위치와 영향범위

0

96

2

인라인 스타일 리렌더링 관련

0

91

2

vsc 에서 npm init 설치시 오류

0

147

2

nextjs 15버전 사용 가능할까요?

0

158

1

화면 새로고침 문의

0

121

1

RTK에서 draft, state 차이가 있나요?

0

153

2

Next 14 사용해도 될까요?

0

452

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

349

1

url 오류 질문있습니다

0

211

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

373

1

sudo certbot --nginx 에러

0

1275

2

Minified React error 콘솔에러 (hydrate)

0

470

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

247

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

327

1

npm run build 에러

0

518

1

front 서버 npm run build 중에 발생한 에러들

0

382

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

338

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

288

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

239

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

201

1