护照 "Hello World" 总是失败

Passport "Hello World" always fails

我有以下内容:

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" = ::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,表示失败。

我试过的

值得注意

我的 bootstrap 阶段有这个:

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 example 复制)

<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>

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

您需要使用一些东西来解析 POST 正文。

Passport 旨在完成一件事:验证请求。它将所有其他功能(包括解析 POST 正文)委托给应用程序。他们在 overview 中这样说,但很容易低估其中的含义。

他们在 Configure 页面的 中间件 部分回到了主题,所以我建议阅读那个。

我碰巧使用 body-parser 模块来处理这个(阅读它 here)。