Javascript 护照;“你好,世界”;总是失败

Javascript 护照;“你好,世界”;总是失败,javascript,node.js,express,passport.js,passport-local,Javascript,Node.js,Express,Passport.js,Passport Local,我有以下资料: import {Router} from 'express'; import passport from 'passport'; import {Strategy} from 'passport-local'; import pg from 'pg'; import {pgUri} from '../environment'; let loginRouter = Router(); passport.use(new Strategy((username, password,

我有以下资料:

import {Router} from 'express';
import passport from 'passport';
import {Strategy} from 'passport-local';
import pg from 'pg';
import {pgUri} from '../environment';

let loginRouter = Router();

passport.use(new Strategy((username, password, done) => done(null, true)));
//{
//    pg.connectAsync(pgUri)
//        .then(([client, release]) => {
//            return client.queryAsync('select * from users where "user" = $1::TEXT', [username])
//                .finally(release);
//        })
//        .tap(result => console.log(result.rows))
//        .then(result => done(null, true));
//}));

loginRouter.get('/', (request, response) => response.render('login'));
loginRouter.post('/', passport.authenticate('local', {successRedirect: '/',
                                                      failureRedirect: '/login'}));

export default loginRouter;
它是一个快速路由文件,定义了最简单的身份验证方案。上述操作总是重定向回
/login
,表示出现故障

我试过的
  • failureRedirect
    更改为
    /loginFailed
    确实会在那里重定向。所以登录失败了
  • 函数体中的断点和控制台日志不会被命中
  • done(null,{foo:bar})调用
    done
    而不是true不会改变任何东西
值得注意
  • 我正在使用babel for ES6支持,但由于这是唯一失败的部分,并且我可以设置的断点(在
    passport.use
    之前)显示所有变量的预期值,我认为这不是问题所在
  • .get()
    路由按预期工作,显示表单
我在引导阶段有这样的功能:

app.use(session({
    secret: "some-secret",
    resave: true,
    saveUninitialized: true
}));

app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser((user, done) => done(null, {foo: "bar"}));

passport.deserializeUser((user, done) => done(null, {foo: "bar"}));
这是我正在使用的表单(直接从复制)


用户名:
密码:

我不知道这里出了什么问题。非常感谢您的帮助。

您需要使用一些东西来解析帖子正文

Passport的设计就是要做一件事:验证请求。它将所有其他功能(包括解析POST正文)委托给应用程序。他们以自己的方式说了这句话,但很容易低估其含义

他们回到页面中间件部分的主题,因此我建议阅读该部分


我碰巧使用了
主体解析器
模块来处理这个问题(请阅读相关内容)。

我觉得您的护照代码还可以。您是否使用任何东西来解析帖子正文?请参阅上的“中间件”部分,并查看
主体解析器
模块。是的。这似乎就是问题所在。遗憾的是,这些事情没有更好的记录。如果你愿意写这篇文章作为答案,我会支持/接受。他们在代码中提到了这一点,但他们在任何地方都没有提及这一事实。希望这将站在这里,以帮助人们寻找它。谢谢
<form action="/login" method="post">
    <div>
        <label>Username:</label>
        <input type="text" name="username"/>
    </div>
    <div>
        <label>Password:</label>
        <input type="password" name="password"/>
    </div>
    <div>
        <input type="submit" value="Log In"/>
    </div>
</form>