2017-10-21 2 views
0
passport.use('local.signup', new Localstrategy({ 
    usernameField: 'email', 
    passwordField: 'password', 
    roleField: 'role', 
    passReqToCallback: true 
}, function(req, email, password, role, done) { 
    req.checkBody('email', 'Invalid Email').notEmpty().isEmail(); 
    req.checkBody('password', 'Invalid Password ').notEmpty().isLength({min:4}); 
    req.checkBody('role', 'Invalid Password').notEmpty(); 
    var errors = req.validationErrors(); 
    if (errors) { 
     var messages = []; 
     errors.forEach(function(error) { 
      messages.push(error.msg); 
     }); 
     return done(null, false, req.flash('error', messages)); 
    } 
    // what the... 
    User.findOne({ 
     'email': email 
    }, function(err, user) { 
     if (err) { 
      return done(err); 
     } 
     if (user) { 
      return done(null, false, { 
       message: 'Email is already in use.' 
      }); 
     } 
     var newUser = new User(); 
     newUser.email = email; 
     newUser.password = newUser.encryptPassword(password); 
     newUser.role = role; 
     newUser.save(function(err, result) { 
      if (err) { 
       return done(err); 
      } 
      return done(null, newUser); 
     }); 
    }); 
})); 
+1

Sind diese Zeilenumbrüche in Strings Teil von deinem ursprünglichen Code? – Xufox

Antwort

0

Ich glaube nicht, diese Einstellung alles tun wird:

roleField: 'role', 

Sie den Fehler, indem Sie Ihre Funktionsargumente aus diesem Problem beheben:

function(req, email, password, role, done) { 

zu diesem:

function(req, email, password, done) { 
+0

events.js: 163 werfen er; // Nicht behandelte 'Fehler' Ereignis ^ Typeerror: done ist keine Funktion bei /Users/ZL/Desktop/nodeJs/debble/passport_config/passport.js:54:20 bei/Users/ZL/Desktop/NodeJS /debble/node_modules/mongoose/lib/model.js:3932:16 –

+0

Ursache mein Schema des Benutzers hat die Rolle, also vielleicht ist die Rolle notwendig, ich bin verwirrt, warum 'getan ist keine Funktion' ist es über Versprechen ? hoffe, du kannst mir helfen, ich kämpfe fast einen Tag –

+0

@conleywang Es hat nichts mit Versprechungen zu tun. Die Funktion wird 4 Argumente übergeben und das vierte Argument ist der 'Fertig'-Callback. Wenn Sie ein 'role' Argument hinzufügen, verschieben Sie' done' auf den 5. Platz, der nicht existiert. Argumente werden nach Position und nicht nach Name bestimmt. Wenn Sie zusätzliche Informationen benötigen, z. B. eine Rolle, müssen Sie sie selbst aus dem 'req'-Objekt abrufen. – skirtle

Verwandte Themen