2013-05-02 6 views
5

Używam LocalStrategy z MySQL (z sequelize), który pracuje z wyjątkiem gdy MYSQL wyrzuca wyjątek (tylko do testowania, ja zamknąć serwer MySQL). Serwer powodujący zawieszenie wywołań wyjątku return done(error).passportjs błąd zwrotna rzuca wyjątek

Oto mój kawałek kodu:

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); 
     }); 
    } 
)); 

i wyjątek:

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

Co robię źle? Dzięki!

EDIT:

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

można pokazać w jaki sposób używasz 'passport.authenticate' w swoich tras? – robertklep

+0

Dodałem 'kod authenticate' – SamSerious

+0

który wygląda raczej hackish i może być przyczyną problemów. Spójrz na [tę stronę] (http://passportjs.org/guide/authenticate/), część o * "Niestandardowe oddzwonienia" *; używa 'paszport.authenticate' zamiast używać' req._passport.instance.authenticate'. – robertklep

Odpowiedz

6

OK głupio mi, brakowało mi next na końcu

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