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);
});
});
}));
Répondre
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) {
é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 –
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 –
@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
Ces sauts de ligne sont-ils dans la partie des chaînes? de votre code original? – Xufox