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());