jQuery AJAX调用Passportjs在Express(nodejs)框架上login

我试图使用AJAX在Express应用程序上使用Passport库调用loginvalidation。 我使用这样的本地策略:

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); }); 

问题是我不知道如何将variables传递给Passport,模拟bodyparser.json()function,即时尝试做这样的事情:

 $(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; }); }); 

编辑-

我的策略:

 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 } )); 

传递凭证错误仍然存​​在,即时消息:

Object {detail:Object} detail:Objectmessage:“Missing credentials” proto

有人能指出我正确的方向吗?

这应该工作,未经testing,让我知道,如果有错别字。

基本上,你需要你的快速应用程序来监听/loginPOST请求,在这条路线上,你可以添加你的护照authentication。

 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); }); 

此外,在你的策略,确保字段名称是正确的,即:

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