PassportJS 使用 BasicStrategy 产生 500 次失败
PassportJS producing 500 failures using BasicStrategy
我已经安装了 passport
和 passport-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) {
在上面的行中,您将自定义对象传递给 auth
但 auth
除外 string
对象。尝试将上面的行替换为:
users.auth(username, function (err, user) {
我已经安装了 passport
和 passport-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) {
在上面的行中,您将自定义对象传递给 auth
但 auth
除外 string
对象。尝试将上面的行替换为:
users.auth(username, function (err, user) {