有一个passport.js
实现用于LDAP-auth
工作。现在,下一步是使用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'});
});
.....
在使用请求'req'调用passport.authenticate
之前的服务器端服务上,需要解密aes加密密码。怎么能在这里实施? (问题不是关于加密,而是如何在将数据作为请求传递给passport.authenticate之前获取数据)
答案 0 :(得分:2)
@Abhijay Ghildyal我不认为他们理解你的问题。确实可以在将请求传递给passport.authenticate()之前拦截该请求。您要做的是将这段代码添加到您的express.js或您执行快速服务器的任何文件。此外,我在这里解密request.body而不是req.user用户尚未登录的时间,但如果您的情况不同,那么您可以用同样的方式解密req.user。 (此处的变量应用是服务器的名称,即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()函数之前,将首先访问此中间件函数。只需确保在导入bodyParser( bodyParser = require(' body-parser')之后,您是否将此应用于req.body,首先添加这些代码行; )在上面的段落之前。
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());