PassportJS使用BasicStrategy产生500次失败

时间:2015-10-14 09:50:51

标签: node.js authentication express passport.js

我已安装passportpassport-http。 我试图让我的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作为Username和testa作为密码重定向到我的500错误页面,虽然文件index.ejs存在于我的views文件夹中,并在我注释掉passport.authenticate行时发送。 试图通过app.js记录产生的错误给了我{}

编辑: 我正在使用

运行应用程序 终端内的

DEBUG=my-app node ./bin/www

EDIT2:

我得到以下输出:

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

1 个答案:

答案 0 :(得分:0)

(这在黑暗中会有点刺痛,因为你没有提供有关错误的任何细节......)

是否可以设置session:true但尚未初始化会话中间件?尝试设置session:false

实际上,问题似乎来自这行代码:

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

在上面一行中,您将自定义对象传递给auth,但auth除了string对象。尝试用以下代码替换上面的行:

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