inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js 교과서 - 기본부터 프로젝트 실습까지

passport serializeUser/deserializeUser

"TypeError: Cannot read property 'findOne' of undefined"가 발생합니다.

1070

자린이

작성한 질문수 7

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가 발생합니다.

 

디비는 몽고디비를 사용중입니다.

mongodb nodejs mysql javascript

답변 7

1

제로초(조현영)

구조분해 할당을 할 이유가 없습니다. 객체나 배열만 구조분해 할당하는 것입니다.

1

제로초(조현영)

몽고디비라서 구조상

const User = require('../model/user') 해야할 것 같내요.

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

제로초(조현영)

localStrategy 코드를 올려주세요.

authenticate 안에서 user.findOne을 하신건 아니죠?

0

자린이

DB는 몽고디비 사용했습니다 ㅠ_ㅠ..

0

제로초(조현영)

아건 시퀄라이즈 버전 문제입니다. 5 버전을 설치하신 것 같은데 4버전을 설치하세요.

npm i sequelize@4

실제 서비스에서도 cluster를 사용하나요?

1

314

2

캐싱에 관하여

0

279

3

salt를 실무에서 사용할때 항상 randomBytes로 만들어줘야 하나요?

0

347

1

게시물 올리기 오류

0

408

1

캐슁 이후 로그인창

0

266

1

kakao passport 질문있습니다.

0

493

3

global객체 공유 질문드립니다.

1

418

1

서버가 죽어버리네요

0

1047

8

포링키 문제..

0

235

2

커넥션 플래시 설치문제

0

216

2

익스프레스 제너레이터? 설치문제

0

2586

6

redis 질문입니다.

0

305

1

9장 세션을 DB에 저장시 리다이렉션 오류 발생

0

874

8

프레임워크 선택에 관하여 질문이 있습니다.

0

300

3

시퀄라이즈 질문입니다 ! !

0

588

1

리뉴얼 강의 12강 socket.io에서 req.session접근 관련 질문

0

922

6

oAuth 질문입니다.

0

356

3

GCP 질문입니다.

0

366

1

Passport 모듈 로그인 구현관련

0

720

6

카카오 로그인 관련 질문입니다!!

0

606

4

스스로 해보기 10-16 nunjuncks 질문있습니다

0

499

5

제로초님 HTTP 완벽가이드 추천해주신거 너무 잘 읽었습니다.

0

317

2

gif채팅방 nunjucks관련 질문입니다!

0

338

3

현영님 몽고db관련 질문입니다.

0

233

3