我正在设置我认为可能是最简单的身份验证-网站在登录屏幕上加载,用户以表单形式输入凭据,提交后,我正在使用Passport.JS和Sequelize来检查凭据。所有这些内容大部分都是从各种教程或Passport网站本身复制而来的。
无论我做什么,进行更改或尝试,只要单击表单提交按钮,该网站就会立即挂起。在“开发工具”网络标签中,我仅将对/login的发布请求显示为待处理。
为了消除所有可能出现的问题,我删除了Sequelize,并使用了硬编码的用户,例如passport github page上的本地使用示例。不过,对Sequelize进行更改没有任何问题。
我敢肯定这是愚蠢的。我已经尝试了显而易见的解决方案,例如确保我的表单正在发送“用户名”和“密码”。
我的表格如下所示:
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);
页面在get请求上加载正常。在发布时,它直接指向:
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);
});
}
));
我换出了使用Sequelize来使用此findByUsername函数检查用户数据库的代码(直接从 Passport github页面上的上述帖子复制并粘贴),但是作为console.log('local strat invoked')是永远不会出现,在那之后我想都没想到。
还包括passport.serializeUser和passport.deserializeUser,但我无法想象在卡住的阶段这些是问题所在。
知道我要执行此操作缺少什么步骤吗?
最佳答案
Passport是中间件,如果将其嵌入到路由处理程序函数中,则需要调用它:
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
});
关于node.js - 更多Passport.js麻烦-卡在表单提交上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20626183/