PassportJS 使用 BasicStrategy 产生 500 次失败

PassportJS producing 500 failures using BasicStrategy

我已经安装了 passportpassport-http。 我正在尝试使用 express 让我的 NodeJS 应用程序允许基本身份验证。

我在 accessControl/users 中定义了以下用于测试目的的身份验证函数:

var auth=function(user, callback){
    console.log("Checking Credentials for "+user)
    if (user === 'chuck') {
        var userObj = { name:'chuck' };
        userObj.validPassword = function(password) {
            return (password === 'testa');
        }
        callback(null, userObj);
    }
}

这是我的快递路线:

var express = require('express');
var users = require('../accessControl/users');
var passport = require('passport')
  , BasicStrategy = require('passport-http').BasicStrategy;

var router = express.Router();

passport.use(new BasicStrategy(
            function(username, password, done) {
                users.auth({ username: username  }, function (err, user) {
                    if (err) { return done(err);  }
                    if (!user) { return done(null, false);  }
                    if (!user.validPassword(password)) { return done(null, false);  }
                    return done(null, user);

                });

            }

            ));


router.get('/test',
    passport.authenticate('basic',{session:true}),
    function(req, res){
    //TODO
    res.render('index');
});

访问 /test 首先会出现浏览器登录提示。 输入 chuck 作为用户名和 testa 作为密码重定向到我的 500 错误页面,尽管文件 index.ejs 存在于我的视图文件夹中并且在我注释掉 passport.authenticate 行时发送。 尝试通过 app.js 记录产生的错误给了我 {}.

编辑: 我是 运行 应用

DEBUG=my-app node ./bin/www 终端内

编辑 2:

我得到以下输出:

my-app Express server listening on port 3000
GET /test 401 18,4333 ms --
GET /test 500 29,882 ms -- 1905

(这会有点摸不着头脑,因为您还没有提供有关错误的任何详细信息...)

会不会是你设置了session:true但是没有初始化session中间件?尝试设置 session:false.

实际上,问题似乎源于这行代码:

users.auth({ username: username  }, function (err, user) {

在上面的行中,您将自定义对象传递给 authauth 除外 string 对象。尝试将上面的行替换为:

users.auth(username, function (err, user) {