• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

passport strategy의 자체적으로 로직 만들어서 낸 에러 내용 프론트에서 받는 법 질문!

19.09.27 19:18 작성 조회수 204

0

//back/routes/user.js 파일 passport.authenticate 메소드 내부 

if (info) {
			return res.status(401).send(info.reason);
		}

//back/passport/local.js 파일 내부

passport.use(new LocalStrategy({
    //req.body 내부에서 넘어오는 아이디, 비밀번호에 해당하는 프로퍼티명을 할당해주어야 한다.
    usernameField: 'userId',
    passwordField: 'password',
  }, async (userId, password, done) => {
    try {
      const user = await db.User.findOne({ where: { userId } });
      if (!user) {
        return done(null, false, { reason: '존재하지 않는 사용자입니다!' });
      }
      const result = await bcrypt.compare(password, user.password);
      if (result) {
        return done(null, user);
      }
      return done(null, false, { reason: '비밀번호가 틀립니다.' });
    } catch (e) {
      console.error(e);
      return done(e);
    }
  }));

(현재 강의 섹션 5 거의 다 들어가는 상황입니다)

없는 아이디로 로그인하거나 비밀번호가 틀리면 위와 같이 오류가 나는데요. 'Request failed ~ ' 이러한 에러 메시지는 리덕스 액션활용해서 리덕스 state로 저장할 수가 있었는데, passport strategy에서 제로초님이 짜셨던 로그인 로직에서 done 메소드의 3번째 인자(reason 프로퍼티 가지는 객체)에 들어가는 데이터는 프론트에서 어떻게 받을 수 있는지 모르겠습니다. 

res.status(401).send로 보내도록 되어있는데 프론트단에서 어떻게 확인할 수 있는 건지 백엔드쪽 제대로 공부하는 것은 처음이라 알려주시면 감사하겠습니다. 

실무에서 어떻게 하는지는 모르겠지만 프론트단에서 사용자에게 로그인이 잘못되었을 때 어떠한 메시지로든 알려주어야할텐데 그래서 여쭤봤습니다. 

답변 1

답변을 작성해보세요.

0

res.status(401).json({ error }) 이런 식으로 객체를 보낼 수 있게 코드를 수정하시고, 프론트에서 console.dir(error) 해보시면 객체가 받아짐을 확인하실 수 있습니다.