Llamada jQuery AJAX al inicio de sesión de Passportjs en Express (nodejs) Framework

Estoy tratando de usar AJAX para llamar a una verificación de inicio de sesión usando la biblioteca de Passport en una aplicación Express. Estoy usando una estrategia local como esta:

router.post('/login', function(req, res, next) { passport.authenticate('loginUsers', function(err, user, info) { if (err) { return next(err); } // if user is not found due to wrong username or password if (!user) { //return res.render('login', {}); res.json({detail: info}); }//(!user) //passport.js has a logIn user method req.logIn(user, function(err) { if (err) { return next(err); } return res.render('account', {}); }); //req.logIn })(req, res, next); }); 

El problema es que no sé cómo pasar las variables a Passport, emulando la funcionalidad bodyparser.json (), estoy tratando de hacer algo como esto:

 $(document).ready(function() { $('form').submit(function() { $.ajax({ type:'POST', url:'/login', data: {username: $('#us').val(), password: $('#pass').val()}, success:function(result){ if(!result){ //$('form input[name="username"]').css("background-color", "red"); } }, error: function (xhr, ajaxOptions, thrownError) { console.log(xhr.status); console.log(thrownError); } }); return false; }); }); 

EDITAR-

Mi estrategia:

 passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { done(null, user); }); passport.use('loginUsers', new LocalStrategy( function(username, password, done) { users.findOne({email: username}, function(err, user) { if (err) { return done(err); } if (!user) { console.log('[+] DB: user/password failure'.red); return done(null, false, {error: ''}); }else if(!bcrypt.compareSync(password, user.hashed_password)){ console.log(("[+] Password error").red); return done(null, false, {error: ''}); }else if(user.verified === false){ console.log("[+] DB: user not verified"); return done(null, false, {error: ''}); }else{ console.log("[+] DB: user/password success".green); return done(null, user); } //else }); //findOne } )); 

El error al pasar las credenciales persiste, obteniendo:

Objeto {detalle: Objeto} detalle: Objectmessage: Proto “Faltan credenciales”:

¿Alguien me puede apuntar en la dirección correcta?

Esto debería funcionar, no probado, hágame saber si hay errores tipográficos.

Básicamente, necesita su aplicación Express para escuchar una solicitud POST en / login, en esta ruta, puede agregar su pasaporte de autenticación.

 app.post('/login', function(req, res, next) { passport.authenticate('loginUsers', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.render('account'); } req.logIn(user, function(err) { if (err) { return next(err); } return res.json({detail: info}); }); })(req, res, next); }); 

Además, en su estrategia, asegúrese de que el nombre de los campos sea correcto, es decir:

 passport.use('loginUsers',new LocalStrategy({ usernameField : 'username', passwordField : 'password', passReqToCallback : true },