2013-05-02 3 views
5

MYSQL에서 예외가 발생하는 경우를 제외하고는 MYSQL과 함께 LocalStrategy를 사용하고 있습니다 (테스트 완료 후 MYSQL 서버를 종료합니다). return done(error) 콜백 스레딩 예외 서버가 손상됩니다.passportjs 오류 콜백 예외가 발생했습니다.

passport.use(new LocalStrategy({usernameField: 'email', passwordField: 'password'}, 
    function (email, password, done) { 
     db.User.find({where: {email: email}}).done(function (error, user) { 
      if(error) return done(error); 

      if (!user) return done(null, false, {message: 'unknown user'}); 

      //validate password 
      if (user.password != password) { 
       return done(null, false, {message: 'invalid password'}); 
      } 
      //all ok 
      return done(null, user); 
     }); 
    } 
)); 

그리고 예외 :

TypeError: Property 'next' of object #<Context> is not a function 
    at Context.actions.error 

내가 잘못 뭐하는 거지 여기

내 코드의 조각? 감사!

는 편집 :

req._passport.instance.authenticate('local', function (err, user, info) { 
     if (err) return validator.emit('exception', err); 

     if (!user) { 
      validator.result.errors.push('Username and password combination not found.'); 
      validator.emit('response'); 
     } else { 
      req.login(user, function (error) { 
       if (error) return validator.emit('exception', error); 

       validator.emit('response'); 
      }); 
     } 
    })(req, res); 
+0

당신이 보여줄 수 끝에 next을 놓친? – robertklep

+0

'authenticate' 코드를 추가했습니다. – SamSerious

+0

오히려 hackish처럼 보이며 문제의 원인 일 수 있습니다. * "Custom Callbacks"*에 관한 부분 인 [이 페이지] (http://passportjs.org/guide/authenticate/)를보십시오. 'req._passport.instance.authenticate' 대신'passport.authenticate'를 사용합니다. – robertklep

답변

6

OK 바보 나, 나는 당신이 당신의 경로에`passport.authenticate`를 사용하는 방법

req._passport.instance.authenticate('local', function (err, user, info) { 
..... 
})(req, res, next); 
관련 문제