Node.js,Express,Passport和ssh2-sftp-client身份验证

时间:2018-09-07 11:00:58

标签: node.js express authentication passport.js ssh2-sftp

我目前正在使用标题中列出的技术,并试图提出一个可用的Web sftp解决方案。我遇到了一个障碍,我敢肯定这主要是由于我在竞技场上的愚昧所致,但是在世界范围内,您如何通过护照将用户名和密码传递给ssh2-sftp_client?

如果我只是放入路由文件并在用户登录后调用它,则此方法有效,但是硬编码用户名和密码不是我所理想的。大声笑

let Client = require('ssh2-sftp-client');
let sftp = new Client();
sftp.connect({
host: '127.0.0.1',
port: '22',
username: 'test',
password: 'Password!1'
}).then(() => {
 return sftp.list('/pathname');
}).then((data) => {
 console.log(data, 'the data info');
}).catch((err) => {
 console.log(err, 'catch error');
});

并且我可以从数据库中提取用户名和密码,但是您知道整个哈希密码都无法解决。

RowDataPacket {
  username: 'test',
  password: 
 '$2b$10$Zk4JNqBlEFmDAvtRI/DUjOp0Tmmza
   CHKJVVnnmNn3Po.ztB3cZ3ta' 
}

我的猜测是,经过护照认证后,它必须位于app.js文件中的某个位置,但我似乎也无法使它正常工作。

passport.use(new LocalStrategy(
  function(username, password, done) {
  console.log(username);
  console.log(password);
  const db = require('./db');

  db.query('SELECT id,password FROM users WHERE username = ?', [username],
  function(err, results, fields){
    if(err) { done(err)};
    if(results.length === 0)
    {
      return done(null, false);
    } else {
      const hash = results[0].password.toString();
      bcrypt.compare(password, hash, function(err, response){
        if(response === true) {
          let Client = require('ssh2-sftp-client');
          let sftp = new Client();
          sftp.connect({
              host: '127.0.0.1',
              port: '22',
              username: username,
              password: password
          }).then(() => {
              return sftp.list('/pathname');
          }).then((data) => {
              console.log(data, 'the data info');
          }).catch((err) => {
              console.log(err, 'catch error');
          });
          return done(null, {user_id: results[0].id, files: list});
        }
        else {
          return done(null, false);
        }
      });
    }



  });

  }));

所以我的问题是,如何从护照中获得可用的密码,将其传递给sftp客户端,并且仍然保持合理的安全级别?

0 个答案:

没有答案