2016-11-09 78 views
1

鉴于代码中包含如何获得一个函数,返回req.connection.user而不使用app.use等?完全困惑!使用node-sspi与express.js

我想在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')); 
}); 

回答

0

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

如果你想有,你做测试的单一功能,并使用快递与路由器,你可以做这样的

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项目