我已安装passport
和passport-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
答案 0 :(得分:0)
(这在黑暗中会有点刺痛,因为你没有提供有关错误的任何细节......)
是否可以设置 session:true
但尚未初始化会话中间件?尝试设置session:false
。
实际上,问题似乎来自这行代码:
users.auth({ username: username }, function (err, user) {
在上面一行中,您将自定义对象传递给auth
,但auth
除了string
对象。尝试用以下代码替换上面的行:
users.auth(username, function (err, user) {