代码之家  ›  专栏  ›  技术社区  ›  Robert Weindl

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

  •  2
  • Robert Weindl  · 技术社区  · 12 年前

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

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

    以下是我尝试使用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]);
        }
    };
    
    3 回复  |  直到 10 年前
        1
  •  3
  •   Jean-Philippe Leclerc    12 年前

    你的问题是你没有使用正确的策略。您应该使用BasicStrategy来使用http身份验证: Passport-HTTP

        2
  •  0
  •   Floby    12 年前

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

        3
  •  0
  •   gevorg Dathan    9 年前

    您也可以使用 http-auth 对于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);
    

    或者你可以和它一起使用 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 + "!");
    });