작성
·
981
0
signup은 정상적으로 동작하지만 login을 진행할 때 "TypeError: Cannot read property 'findOne' of undefined"가 발생합니다.
디버깅을 해보니까
passport.authenticate('local', (authError, user, info) => {
console.log(user)
})
안에서 user가 undefined입니다.
결국 passport의 localStrategy에서 문제가 발생하는 것 같습니다.
또 localStrategy에서
{ usernameField: 'email', passwordField: 'password' }
를 지우면 findOne 에러는 발생하지 않습니다. 하지만 이 경우에는 passport.authenticate 안에서 user를 찍어보면 false가 발생합니다.
디비는 몽고디비를 사용중입니다.
답변 7
1
1
0
0
const LocalStrategy = require('passport-local').Strategy;
const { User } = require('../model/user');
module.exports = (passport) => {
passport.use(
new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password'
},
async (email, password, done) => {
// done(에러, 성공, 실패)
try {
console.log('어디가 에러나는거야');
const exUser = await User.findOne({ email: email });
if (exUser) {
// 비밀번호 검사
const result = await bcrypt.compare(password, exUser.password);
if (result) {
done(null, exUser);
} else {
done(null, false, { message: '비밀번호가 일치하지 않습니다.' });
}
} else {
done(null, false, { message: '가입되지 않은 회원입니다.' });
}
} catch (err) {
console.error(err);
done(err);
}
}
)
);
};
localstrategy.js 코드입니다.
네, authenticate 안에서는 findOne을 해주지 않았습니다.
0
0
0