2017-10-21 22 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

Ces sauts de ligne sont-ils dans la partie des chaînes? de votre code original? – Xufox

Répondre

0

Je ne crois pas que ce paramètre fera quoi que ce soit:

roleField: 'role', 

Vous pouvez corriger l'erreur en modifiant vos arguments de la fonction de celle-ci:

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

à ceci:

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

événements.js: 163 throw er; // Unhandled 'erreur' événement ^ TypeError: fait est pas une fonction à /Users/ZL/Desktop/nodeJs/debble/passport_config/passport.js:54:20 à/Utilisateurs/ZL/Bureau/NodeJS /debble/node_modules/mongoose/lib/model.js:3932:16 –

+0

parce que mon schéma d'utilisateur a le rôle, alors peut-être que le rôle est nécessaire, je suis confus que pourquoi 'fait n'est pas une fonction' est-ce à propos de Promise ? J'espère que vous pouvez m'aider, je me bats presque un jour –

+0

@conleywang Il n'a rien à voir avec les promesses. La fonction recevra 4 arguments et le 4ème argument est le callback 'done'. En ajoutant un argument 'role' vous déplacez' done' à 5th, ce qui n'existe pas. Les arguments sont déterminés par position, pas par nom. Si vous avez besoin d'informations supplémentaires telles qu'un rôle, vous devrez l'obtenir vous-même à partir de l'objet 'req'. – skirtle