2017-07-08 1 views
2

J'essaye de faire un login avec node.js en utilisant passport mais j'ai un problème quand un nom d'utilisateur qui n'est pas dans la BD essaie de se connecter. Je reçois l'erreur suivante (node:9708) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: deferred.resolve is not a function.Node.js Unhandled promettre le rejet

Connexion Fonction:

exports.login = function(username, password) { 
    var deferred = Q.defer; 

    MongoClient.connect(mongodbUrl, function(err, db) { 
     var collection = db.collection('users'); 

     collection.findOne({'username' : username}).then(function(result) { 
      if (result === null) { 
       console.log('User not found:', username); 
       deferred.resolve(false); 
      } else { 
       var hash = result.password; 
       console.log('User found:', username); 

       if (bcrypt.compareSync(password, hash)) { 
        deferred.resolve(result); 
       } else { 
        console.log('Authentication for ' + username + 'failed'); 
        deferred.resolve(false); 
       } 
      } 

      db.close(); 
     }); 
    }).catch(err => console.log(err)); 

    return deferred.promise; 
}; 

Passport.use Fonction:

passport.use('local-signin', new LocalStrategy({passReqToCallback : true}, function(req, username, password, done) { 
    funct.login(username, password).then(function(user) { 
     if (user) { 
      console.log(user.username + 'logged in'); 
      req.session.success = 'Welcome, ' + user.username + '!'; 
      done(null, user); 
     } 

     if (!user) { 
      console.log('Failed login attempt'); 
      req.session.error = 'Your Password or Username is incorrect! Please try again.'; 
      done(null, user); 
     } 
    }).fail(function(err) { 
     console.log(err.body); 
    }); 
})); 

Répondre

2

Les promesses peuvent être résolus ou rejetées. Vous devez programmer pour les deux cas. Ajouter un .catch à la fin de votre code comme ceci:

collection.findOne({'username' : username}).then().catch(err => console.log(err)) 
+0

Il semble se plaindre de 'deferred.resolve' ne pas être une fonction dans la première déclaration' if' sur la fonction de connexion. – Nhabbott

+0

Je l'ai compris mais la question était de savoir comment corriger le "rejet de promesse non gérée" Quand il attrape l'erreur et la partage alors nous pouvons avoir une compréhension plus détaillée du problème – Blaze349

+0

Ensuite, vous devez créer cette fonction. la promesse non gérée alors s'il vous plaît donnez-lui une coche et un upvote. – Blaze349