Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PassportJS-在将有效负载数据传递给passport.authenticate作为请求参数之前获取有效负载数据_Javascript_Angularjs_Node.js_Passport.js_Cryptojs - Fatal编程技术网

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

Javascript PassportJS-在将有效负载数据传递给passport.authenticate作为请求参数之前获取有效负载数据,javascript,angularjs,node.js,passport.js,cryptojs,Javascript,Angularjs,Node.js,Passport.js,Cryptojs,有一个用于LDAP auth的实现,它可以正常工作。现在,下一步是使用以下方法在客户端加密密码: 客户端角度js控制器 $scope.authenticate = function () { var auth = new login(); auth.username = $scope.username; auth.password = CryptoJS.AES.encrypt($scope.password); //// HERE auth.$save(func

有一个用于
LDAP auth
的实现,它可以正常工作。现在,下一步是使用以下方法在客户端加密密码:

客户端角度js控制器

$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);
  });
}
服务器端服务

.....
.....
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之前在服务器端服务上进行身份验证。使用请求'req'对aes加密密码进行解密。如何在这里实现这一点?(问题不是关于加密,而是如何在数据传递到passport.authenticate as request之前获取数据)

@Abhijay Ghildyal我认为他们不理解你的问题。确实可以在请求传递给passport.authenticate()之前拦截该请求。您要做的是将这段代码添加到express.js或您在其中执行express服务器实现的任何文件中。另外,我在这里解密request.body而不是req.user,因为此时用户尚未登录,但是如果您的情况不同,那么您可以用相同的方式解密req.user。(这里的变量app是服务器的名称,即var app=express();

就是这样。此中间件函数将在passport.authenticate()函数之前首先到达。只需确保如果将此应用于req.body,则在导入bodyParser(bodyParser=require('body-parser');)之后,在上面的文章之前,首先添加这些代码行

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

我不确定你想在这里做什么,但SHA1是散列函数,不是加密。它不能被“解密”。为什么不使用HTTPS(SSL)来加密服务器和客户端之间的通信?@estus-这样做的目的是降低任何暴力攻击的速度,并隐藏密码,使其不被计算机检测到。网络通过https进行加密,我不必在意这一点。我只想让密码远离客户端的肉眼。散列无法解密。发送一个散列假设它存储在数据库中,原始密码永远不会出现在任何地方。当其他事情做对了,它不会使任何事情更安全。你应该知道你在做什么,因为破坏安全性要比加强安全性容易得多。我不认为不含盐的SHA1在任何方面都是有用的。
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());