使用带有express.js的node-sspi

时间:2016-11-09 22:59:19

标签: authentication

鉴于包含的代码,如何在不使用app.use等的情况下获取返回req.connection.user的函数?完全糊涂了!

我想在app.js中这样做我已经尝试了十几种不同的方式,但我正在撞墙。感谢

function GetUserName() {
}

--Sample code
'use strict';

var express = require('express');
var app = express();
var server = require('http').createServer(app);
app.use(function (req, res, next) {
  var nodeSSPI = require('node-sspi');
  var nodeSSPIObj = new nodeSSPI({
    retrieveGroups: true
  });
  nodeSSPIObj.authenticate(req, res, function(err){
    res.finished || next();
  });
});
app.use(function (req, res, next) {
  var out = 'Hello ' + req.connection.user + '! You belong to following groups:<br/><ul>';
  if (req.connection.userGroups) {
    for (var i in req.connection.userGroups) {
      out += '<li>'+ req.connection.userGroups[i] + '</li><br/>\n';
    }
  }
  out += '</ul>';
  res.send(out);
});
// Start server
var port = process.env.PORT || 3000;
server.listen(port, function () {
  console.log('Express server listening on port %d in %s mode', port, app.get('env'));
});

1 个答案:

答案 0 :(得分:0)

那是不可能的。你也不需要。你会发现检查用户名有趣的所有功能都会将req对象发送给它。

如果您希望在执行测试时使用单个功能,并且使用Express和路由器,则可以像这样使用

function custom_auth(req, res, next) {
    if (req.connection.user === 'valid_username') {
        next();
        return;
    } else {
        res.status(401).send({
            message: 'Access denied'
        });
    }
}

router.get('/', custom_auth, function(req, res, next) {
    // Send your response here
}

当有人请求'/'时,他们将首先被发送到custom_auth功能。当next();被调用时,它们将被发送回去 路由功能。如果您的身份验证测试失败,您希望以某种方式处理它,在此示例中,他们只获得带有JSON消息的403。

如果您不知道如何使用路由器以及它与app.js的关系,请查看express-generator,这将为Express项目设置一些管道