La autenticación de Express.js Passport falla automáticamente la estrategia de omisión

ACTUALIZAR

He movido el código desde el interior del pasaporte local a un controlador separado y funciona bien. El problema radica en el pasaporte y el uso del registro local, sin embargo, no sé por qué.


Tengo una configuración con Node.js (Express) + Passport para la autenticación y el registro. Este es un procedimiento estándar que lo he usado antes, sin embargo, no parece funcionar. El registro de pasaporte pasa inmediatamente al fallo Redireccionar. El problema principal es que el código no afecta a ninguna de las declaraciones de console.log () y, por lo tanto, asumo que ni siquiera procesa la primera solicitud y falla automáticamente. ¿Alguna idea de por qué o cómo debugg?

registro cmd:

POST /register 302 4ms - 58b GET / 304 2ms GET /css/bootstrap.css 304 1ms GET /css/main.css 304 1ms GET /javascript/chart.js 304 2ms GET /javascript/bootstrap.js 304 2ms GET /javascript/index.js 304 2ms 

formulario index.html:

   



Ruta:

  app.post('/register', passport.authenticate('local-signup', { successRedirect : '/', // redirect to the secure profile section failureRedirect : '/', // redirect back to the signup page if there is an error failureFlash : true // allow flash messages })); 

pasaporte local registrarse:

 // ========================================================================= // LOCAL SIGNUP ============================================================ // ========================================================================= passport.use('local-signup', new LocalStrategy({ // by default, local strategy uses username and password, we will override with email usernameField: 'email', passwordField: 'password', passReqToCallback: true // allows us to pass in the req from our route (lets us check if a user is logged in or not) }, function (req, email, password, done) { // asynchronous process.nextTick(function () { // check if the user is already logged in if (!req.user) { console.log("step1"); User.findOne({ $or: [{ 'valid.email': email }, { 'emailList': email }] }, function (err, user) { // if there are any errors, return the error if (err) return done(err); // check to see if theres already a user with that email if (user) { console.log("step2"); return done(null, false, req.flash('signupMessage', 'That email is already taken.')); } else { console.log("step5"); newUser.anonym.CodeName = req.body.CodeName; newUser.anonym.extraInfo = req.body.aXInfo; newUser.emailList.push(req.body.AEmail); //Generate random string var rString = null; var goOn = false; while (!goOn) { console.log("step6"); rString = randomString(req.body.SecretCodeLength, charSet); User.findOne({ 'emailList': rString }, function (err, user) { // if there are any errors, return the error if (err){ console.log(err); return done(err);} // check to see if theres already a user with that email if (!user) { goOn = true; } }); } console.log("step7"); newUser.anonym.secretCode = rString; rString = null; newUser.save(function (err) { if (err) throw err; return done(null, newUser); }); } // } }); } else { console.log('test5'); } }); })); 

También lo probé usando angular.js para ejecutar la publicación, pero el problema continúa. Definitivamente es algo con pasaporte.

El problema estaba aquí:

 passport.use('local-signup', new LocalStrategy({ // by default, local strategy uses username and password, we will override with email usernameField: 'email', passwordField: 'password', passReqToCallback: true // allows us to pass in the req from our route (lets us check if a user is logged in or not) 

}

Si el email o la password no son proporcionados, el pasaporte simplemente falla automáticamente. Supongo que alguna documentación de eso hubiera sido útil !.

Si no identifica el usernameField de usernameField LocalStrategy en la nueva LocalStrategy , se guardará de forma predeterminada el nombre de username en el nombre de username , como se explica aquí .

Esta estrategia toma un hash de opciones opcionales antes de la función, por ejemplo, new LocalStrategy({/* options */, callback}) .

Las opciones disponibles son:

  • usernameField – Opcional, por defecto a username
  • passwordField – Opcional, por defecto a la password

Ambos campos definen el nombre de las propiedades en el cuerpo de POST que se envían al servidor.