2016-11-09 69 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項目