Как заставить клиента скачать файл со страницы, защищенной паролем?

У меня есть ftp-сервер, защищенный паролем. Я хочу, чтобы пользователи моего сайта могли скачивать с ftp-сервера, нажав на кнопку, и им не разрешалось знать пароль. Я использовал puppeteer для аутентификации, но поскольку код написан на сервере, он загружается на мой сервер, а не на клиент. Это код:

async function run() {
        const browser = await puppeteer.launch({headless: false});
        const page = await browser.newPage();
        await page.authenticate({username:theUsername, password:thePassword});
        await page.goto(theURL);
        browser.close();
        return page;
    }
    run();
    res.send();

Вышеприведенное работает, но запускает хром на серверной части, и файл загружается в файловую систему, а это не то, что мне нужно. Внешний интерфейс написан с использованием vue, и по какой-то причине я не могу загрузить puppeteer на интерфейсе. Есть ли другой способ сделать это?


person Danz Tim    schedule 26.12.2019    source источник
comment
Если вы не хотите, чтобы пользователь знал пароль, вам нужно передать ему загрузку через прокси и выполнить аутентификацию полностью на вашей стороне.   -  person Joseph Sible-Reinstate Monica    schedule 26.12.2019
comment
Это предпочтительный способ, потому что они не будут знать пароль, но не могли бы вы уточнить, как «проксировать загрузку»?   -  person Danz Tim    schedule 26.12.2019


Ответы (1)


Вы можете безопасно отправлять пароли со стороны клиента, используя переменные среды. Информация об этом здесь: https://dev.to/deammer/loading-environment-variables-in-js-apps-1p7p

Имейте в виду, что для Vue вам нужно использовать префикс переменных среды. Так что вместо MY_VAR нужно ко всему привязать VUE_APP_, так будет VUE_APP_MY_VAR.

await page.authentication({ username: process.env.VUE_APP_USERNAME, password: process.env.VUE_APP_PASSWORD })
person Arc    schedule 26.12.2019
comment
Эй, как я уже упоминал, puppeteer не работает в Vue, и я только что обнаружил этот вопрос stackoverflow.com/questions/52834849/ - person Danz Tim; 26.12.2019