更多的Passport.js困境 – 挂在表单提交

我设置了我认为最简单的auth可能 – 一个网站加载在login屏幕上,用户input凭据的forms,提交我使用Passport.JS和Sequelize检查凭据。 大多数这些都是从各种教程,或护照网站本身复制。 不pipe我做什么,只要点击表单提交button,网站就会挂起。 在开发工具networking选项卡,我只是显示发送请求/login为挂起。

为了消除所有可能的附加问题,我剥离了Sequelize,并使用硬编码的用户,在护照github页面上使用本地使用示例。 不过,对Sequelize来说没有任何改变,这不是问题所在。

我确定这是愚蠢的。 我已经尝试了明显的解决scheme,例如确保我的表单正在发送“用户名”和“密码”。

我的表单看起来像这样:

form(method="post", action="/login") fieldset legend Please Log In label(for="username") Username: input#username(type='text', name="username", autocomplete="off") label(for="password") Password: input#password(type='password', name="password") button#login(type="submit") Log In 

在节点中,我的app.js使用一个路由器,其中包括:

 var login = require('../app/controllers/login'); app.get('/', login.index); app.post('/login', login.auth); 

获取请求的页面加载正常。 在发布后,它指向这个:

 exports.auth = function (req, res, next) { console.log(req.body); passport.authenticate('local', { successRedirect: '/home', failureRedirect: '/', failureFlash: true }); }; 

console.log(req.body)显示正常,显示表单值,所以我们没问题。 但没有任何事情。 这是最后一部分:

 passport.use(new LocalStrategy( function(username, password, done) { console.log('local strat invoked'); findByUsername(username, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Unknown user ' + username }); } if (user.password != password) { return done(null, false, { message: 'Invalid password' }); } return done(null, user); }); } )); 

我用这个findByUsername函数replace了用Sequelize来检查用户数据库的代码(直接从上面提到的在gitub的passport页面上复制并粘贴),但是因为console.log('local strat invoked')是永远不会出现,在这一点之后我甚至都不会猜测。

还包括passport.serializeUser和passport.deserializeUser,但我无法想象这些问题在我卡住的阶段。

任何想法,我失去了什么步骤来得到这个工作?

Passport是中间件,如果您将其embedded到路由处理函数中,则需要调用它:

 exports.auth = function (req, res, next) { console.log(req.body); passport.authenticate('local', { successRedirect: '/home', failureRedirect: '/', failureFlash: true })(req, res, next); // <-- NEED TO INVOKE WITH req, res, next }; 

或者更简单地将其用作中间件(这是推荐的方法:

 exports.auth = passport.authenticate('local', { successRedirect: '/home', failureRedirect: '/', failureFlash: true });