2015-10-14 46 views
0

我已经安装了passportpassport-http。 我想让我的NodeJS应用程序允许基本身份验证,使用快递。PassportJS使用BasicStrategy产生500次故障

我已经定义了用于测试目的以下验证功能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运行终端

EDIT2里面的应用程序:

我得到以下输出:

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

我假设第一个代码片段驻留在'accessControl/users.js'并通过module.exports导出? –

+0

另外,重新记录错误,你从哪里运行应用程序?如果一个终端,你应该在那里看到错误输出。 –

+0

感谢这些提示。我编辑了这个问题。不幸的是,没有输出在与失败相关的shell上完成。 – nesreka

回答

0

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

请问您是否设置了 session:true但尚未初始化会话中间件?尝试设置 session:false

事实上,它看起来像问题源于这行代码茎:

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

在上面行要传递的自定义对象authauth节选一个string对象。尝试替换上面的行:

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

非常感谢,但不幸的是,这并没有解决500的故障。 – nesreka

+0

@nesreka当你用**特定的**错误更新了问题时,请对我进行Ping。 –

+0

不知何故,我无法得到任何错误输出。发送err对象给出了{{}'和编辑后的shell输出什么也没有说。 – nesreka