3

我有以下内容:

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真正重定向到那里。所以登录确实失败。
  • console.log函数体内的断点和s 不会被命中。
  • 调用donewithdone(null, {foo: "bar"})而不是 true 不会改变任何事情。

值得注意

  • 我正在使用 babel 来支持 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"}));

这是我正在使用的表格(直接从护照示例中复制)

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

我不知道这里出了什么问题。将不胜感激任何帮助。

4

1 回答 1

4

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

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

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

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

于 2015-05-09T15:07:42.470 回答