2017-07-08 11 views
2

Ich versuche, eine Anmeldung mit node.js mit passport machen, aber ich habe ein Problem, wenn ein Benutzername, der nicht in der DB ist versucht, sich anzumelden. Ich erhalte den folgenden Fehler (node:9708) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: deferred.resolve is not a function.Node.js Unbehandelte Versprechen Ablehnung

Login-Funktion:

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 Funktion:

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

Antwort

2

Promises kann aufgelöst oder abgelehnt werden. Sie müssen für beide Fälle programmieren. Fügen Sie ein Catch an das Ende Ihres Codes wie folgt ein:

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

Es scheint sich zu beschweren über 'deferred.resolve' nicht eine Funktion in der ersten' if' Anweisung auf der Login-Funktion. – Nhabbott

+0

Ich verstand das, aber die Frage war, wie "Unhandled Promise Ablehnung" zu beheben. Wenn er den Fehler fängt und teilt es dann können wir ein detaillierteres Verständnis des Problems haben. – Blaze349

+0

Dann müssen Sie diese Funktion erstellen. Wenn meine Frage gelöst das unbehandelte Versprechen dann bitte ein Tick und ein upvote geben. – Blaze349

Verwandte Themen