passport.authenticate – 用户名和密码为空

这可能是一些基本的错误,但我正在看教程,即使我认为我提交login表单后,我应该做的一切就像我应该redirect到“failureRedirect”页面。 当我看护照模块中的源代码的东西。

在这之后:

Strategy.prototype.authenticate = function(req, options) { options = options || {}; var username = lookup(req.body, this._usernameField) || lookup(req.query, this._usernameField); var password = lookup(req.body, this._passwordField) || lookup(req.query, this._passwordField); //I added: console.log("U-> " + username); console.log("P-> " + password); 

控制台说

 U-> null P-> null 

之后,rest不会执行。

  if (!username || !password) { return this.fail({ message: options.badRequestMessage || 'Missing credentials' }, 400); } 

我不确定应该在这里发布哪些代码部分。 也许这可以帮助

 passport.use(new LocalStrategy( function(username, password, done){ console.log("passport.use new LocalStrategy"); //never gets executed 

//永远不会被执行

  User.getUserByUsername(username, function(err, user){ if (err) throw err; if(!user) { console.log("Unknown user"); return done(null, false, {message: "Uknkown User"}); } User.comparePassword(password, user.password, function(err, isMatch){ if (err) throw err; if (isMatch) { return done(null, user); } else { console.log("invalid Pass"); return done(null, false, {message: "Invalid Password"}); } }); }); })); router.post("/login", passport.authenticate("local", {failureRedirect:"/users/login/err", failureFlash:"invalid username or pass"}), function(req, res){ console.log("Authenticated OK"); req.flash("success", "You are logged in"); res.redirect("/xx"); }); 

我不确定你正在做的确切的实施。 可能您正在使用原型模式重写身份validationfunction。 但是,使用Passportjs进行身份validation非常简单。 我最近在我的项目中做了一个。 请通过下面的链接,以我自己的实施Passportjs的经验, 我有一个很好的文档artcile,我写在我的科技博客。 希望这可以帮助你

 // complete code for the exmaple node rest api authentication using passport var express = require('express'); var passport = require('passport'); var passportHttp = require('passport-http'); var basicStrategy = passportHttp.BasicStrategy; // using the basic authentication var app = express(); app.get('/',function(req,res){ res.send("There you go"); }); app.use(passport.initialize()); // initialize and use it in express passport.use(new passportHttp.BasicStrategy(function(username,password,done) { if(username === password){ done(null,username); //null means no error and return is the username } else{ return done(null,'there is no entry for you!'); // null means nothing to say, //no error. 2nd is the custom statement business rule } })); // this function hits first when there is an API call. function ensureAuthenticated(req,res,next){ if(req.isAuthenticated()){ next(); // next redirects the user to the next api function waiting to be executed in the express framework }else{ res.sendStatus(403); //forbidden || unauthorized } }; // this means all the API calls that hit via mydomain.com/api/ uses this authentication. //session is false, because its a HTTP API call. // setting this helps passport to skip the check if its an API call or a session web call app.use('/api',passport.authenticate('basic',{session:false})); // this is served the user once the authentication is a susccess app.get('/api/data',ensureAuthenticated,function(req,res){ var somevalue = [{name: 'foo'}, {name: 'bar'}, {name: 'baz'}]; res.send(somevalue); }); app.listen(3250); console.log('listening to port on ' + 3250);