Node.js PassportJS使用基本策略产生500次故障
我已经安装了Node.js PassportJS使用基本策略产生500次故障,node.js,authentication,express,passport.js,Node.js,Authentication,Express,Passport.js,我已经安装了passport和passport http。 我正在尝试让我的NodeJS应用程序允许使用express进行基本身份验证 我在accessControl/users中为测试目的定义了以下身份验证功能: var auth=function(user, callback){ console.log("Checking Credentials for "+user) if (user === 'chuck') { var userObj = { name:
passport
和passport http
。
我正在尝试让我的NodeJS应用程序允许使用express进行基本身份验证
我在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
(这将是一个有点冒险的过程,因为您没有提供有关错误的任何详细信息…)
是否您设置了会话:true
,但尚未初始化会话中间件?尝试设置会话:false
实际上,问题似乎源于以下代码行:
users.auth({ username: username }, function (err, user) {
在上行中,您正在将自定义对象传递给auth
,但auth
除外字符串
对象。尝试将上述行替换为:
users.auth(username, function (err, user) {
我假设第一个代码段驻留在
accessControl/users.js
中,并通过module.exports导出?另外,重新记录错误,从何处运行应用程序?如果是一个终端,你应该在那里看到错误输出。谢谢这些提示。我编辑了这个问题。不幸的是,没有在与故障相关的shell上执行输出。因为没有数据库会发生故障,也许代码中的某个地方有语法错误?尝试通过类似JSHint的方式运行它?谢谢,但不幸的是,这并没有修复500失败。@nesreka在您用特定错误更新问题时向我发出警告。不知何故,我无法获得任何错误输出。发送err对象会给出{}
,编辑后,shell输出不会显示任何内容。@nesreka您是在使用express generator生成模板还是什么?尝试将调试环境变量设置为true。这将使调用堆栈出现在错误页面中。我通过谷歌搜索找到了记录错误的方法:,我需要将console.error(error.message)添加到我的500 error函数中。因此我能够解决这个问题,因为这只是一个小的初始化问题。