PassportJS – 在将有效载荷数据传递给passport.authenticate作为请求参数之前获取

有一个passport.js实现正在用于LDAP-auth工作。 现在下一步是使用Crypto-js客户端的Crypto-js ,如下所示:

Client-side angular-js controller

 $scope.authenticate = function () { var auth = new login(); auth.username = $scope.username; auth.password = CryptoJS.AES.encrypt($scope.password); //// HERE auth.$save(function (response){ console.log(response); },function(err){ console.log(err); }); } 

Server-side service

 ..... ..... app.post('/login', passport.authenticate('ldapauth'), (req, res) => { console.log("req.user: ",req.user); req.session.username = req.user[ldap.username]; req.session.userModel = req.user; res.status(200).send({"success": 'success'}); }); ..... 

在调用passport.authenticate之前在服务器端的服务上,用请求'req'validationaesencryption的密码需要被解密。 这怎么能在这里实现呢? (这个问题不是关于encryption,而是如何获取数据,然后它传递给passport.authenticate作为请求)

@Ahhijay Ghildyal我不认为他们理解你的问题。 在传递给passport.authenticate()之前确实有可能截获请求。 你想要做的就是把这段代码添加到你的express.js或你做快速服务器实现的文件中。另外我在这里解密request.body而不是req.user,因为在那个时候用户还没有login,但是如果你的情况不同,那么你可以用同样的方法解密req.user。 ( 这里的variables应用程序是你的服务器的名称,即var app = express();

 app.use(function(req, res, next) { if(req.url === '/login'){ //CryptoJS.AES.decrypt() is Assumed to be the decrypter function here. req.body = CryptoJS.AES.decrypt(req.body); console.log(req.body); //To view decrypted body } next(); }); 

这就对了。 这个中间件函数将在passport.authenticate()函数之前到达。 只要确定你是否将这个应用到req.body中,首先在上面的段落之前导入bodyParser( bodyParser = require('body-parser'); )之后添加这些代码行。

 app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());