Проверка подлинности Node.js, Express, Passport и ssh2-sftp-client
В настоящее время я играю с технологиями, перечисленными в названии, и пытаюсь найти полезное решение для веб-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 и при этом поддерживать разумный уровень безопасности?