gpt4 book ai didi

node.js - 更多 Passport.js 问题 - 提交表单时挂起

转载 作者:IT老高 更新时间:2023-10-28 23:02:26 25 4
gpt4 key购买 nike

我正在设置我认为可能是最简单的身份验证 - 网站加载到登录屏幕上,用户在表单中输入凭据,提交时我使用 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

在 Node 中,我的 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 函数替换了使用 Sequelize 为用户检查数据库的代码(直接从 Passport github 页面上的上述帖子复制并粘贴),但是作为 console.log('local strat 调用') 永远不会出现,我猜在那之后什么都不重要了。

还包括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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com