작성
·
253
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) 해보시면 객체가 받아짐을 확인하실 수 있습니다.