Node.js中的中间件与OO JavaScript
目前,我正在尝试在面向对象的Node.js服务器中使用中间件“passport”。重新启动服务器后,一切正常。我可以访问不需要身份验证的路由。但是当我试图通过身份验证访问路由时,我总是得到401响应(无身份验证)。这似乎还可以,但不幸的是,我没有在LocalStrategy中输入函数(用户名、密码、完成) 所以我认为我的问题在于我尝试使用OOJavaScript风格的中间件的方式。我用来启动的模板来自RedHat OpenShift云,可以在以下内容中看到: 以下是我尝试使用passport中间件的服务器初始化方法:Node.js中的中间件与OO JavaScript,node.js,openshift,passport.js,Node.js,Openshift,Passport.js,目前,我正在尝试在面向对象的Node.js服务器中使用中间件“passport”。重新启动服务器后,一切正常。我可以访问不需要身份验证的路由。但是当我试图通过身份验证访问路由时,我总是得到401响应(无身份验证)。这似乎还可以,但不幸的是,我没有在LocalStrategy中输入函数(用户名、密码、完成) 所以我认为我的问题在于我尝试使用OOJavaScript风格的中间件的方式。我用来启动的模板来自RedHat OpenShift云,可以在以下内容中看到: 以下是我尝试使用passport中间
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]);
}
};
在我看来,您没有使用
express.router()
中间件。您的问题在于没有使用正确的策略。您应该使用基本策略来使用http身份验证:您还可以用于http基本/摘要身份验证:
// 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);
或者,您也可以将其用于:
你好,谢谢你的回复。刚刚添加了express.router配置,但仍然没有调用该方法。通常,如果用户试图访问需要身份验证的站点,我会收到一条日志消息(console.log(“TEST”);)。在我看来,问题一定是在课堂上使用passport。谢谢,你是对的,这是我想要使用的策略。最后你也把我带到了正确的方向。我在寻找passport的构造器。我想我可以简单地使用self.passport=new passport()或self.passport=passport()。(就像express允许的那样)。在检查passport实现之后,我发现我必须使用self.passport=new passport.passport();
// 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 + "!");
});