使用OO JavaScript的Node.js中的中间件

目前我正在尝试在面向对象的Node.js服务器中使用中间件“passport”。 重新启动服务器后,一切工作正常。 我可以访问不需要身份validation的路由。 但是当我试图访问一个路由与身份validation我总是得到响应401(无authentication)。 这似乎是好的,但不幸的是我不在LocalStrategy中input函数(用户名,密码,完成)。

所以我认为我的问题是我尝试在oo javascript风格中使用中间件。 我用来启动的模板来自RedHat OpenShift Cloud,可以在https://github.com/openshift/nodejs-custom-version-openshift/blob/master/server.js中看到

这里是我尝试使用护照中间件的服务器初始化方法:

self.initializeServer = function() { self.createGetRoutes(); self.createPostRoutes(); self.app = express.create(); passport.use(new LocalStrategy( function(username, password, done) { console.log("TEST"); process.nextTick(function () { console.log('Here I am!'); return done(null, user); }); } )); self.app.configure(function() { self.app.use(passport.initialize()); }); // Paths without authentication self.app.get('/holy', function(req, res) {res.send('SHIT! \n')}); // Add GET handlers for the app with authentication (from the getRoutes). for (var g in self.getRoutes) { self.app.get(g, passport.authenticate('local', { session: false }), self.getRoutes[g]); } // Add POST handlers for the app with authentication (from the postRoutes). for (var p in self.postRoutes) { self.app.post(p, passport.authenticate('local', { session: false }), self.postRoutes[p]); } }; 

你的问题在于你没有使用正确的策略。 您应该使用BasicStrategy来使用httpauthentication: Passport-HTTP

在我看来,你没有使用express.router()中间件。

您也可以使用http-auth进行HTTP基本/摘要式身份validation:

 // Authentication module. var auth = require('http-auth'); var basic = auth.basic({ realm: "Simon Area.", file: __dirname + "/../data/users.htpasswd" // gevorg:gpass, Sarah:testpass ... }); // Creating new HTTP server. http.createServer(basic, function(req, res) { res.end("Welcome to private area - " + req.user + "!"); }).listen(1337); 

或者你可以使用护照 :

 // Authentication module. var auth = require('http-auth'); var basic = auth.basic({ realm: "Simon Area.", file: __dirname + "/../data/users.htpasswd" // gevorg:gpass, Sarah:testpass ... }); // Application setup. var app = express(); // Setup strategy. var passport = require('passport'); passport.use(auth.passport(basic)); // Setup route. app.get('/', passport.authenticate('http', { session: false }), function(req, res) { res.end("Welcome to private area - " + req.user + "!"); });