Stack:
Angular6 + Firebase + Puppeteer
Справочная информация:
Я пытаюсь распечатать страницу плана, относящуюся к любому зарегистрированному пользователю в моем приложении, в виде PDF-файла с URL-адреса. Например: https://myapp.firebaseapp.com/print/plan/123
Где я нахожусь:
Я только что успешно настроил Puppeteer на Firebase, который теперь будет отображать страницу веб-сайта, преобразовывать ее в PDF и передавать обратно во внешний интерфейс в функции Firebase - которая работает хорошо.
Вот моя функция Firebase:
const puppeteer = require('puppeteer');
exports.genPdf = functions.runWith({memory: '2GB', timeoutSeconds: 60}).https.onRequest(async (req, res) => {
cors(req, res, () => {});
console.log('GenPDF');
console.log('req', req.query);
const url = req.query.url;
if (!url) {
return res.status(400).send(
'Please provide a URL. Example: ?url=https://example.com');
}
console.log('Process:', url);
const browser = await puppeteer.launch({args: ['--no-sandbox']});
// render and save file
try {
const page = await browser.newPage();
await page.goto(url, {waitUntil: 'networkidle2'});
//pdf
const buffer = await page.pdf({
format: 'A4'
});
await browser.close();
res.type('pdf').send(buffer);
} catch (e) {
await browser.close();
res.status(500).send(e.toString());
}
});
Проблема:
Однако проблема, с которой я сейчас сталкиваюсь, заключается в том, что мне нужно, чтобы он мог отображать план пользователя из зарегистрированного состояния , но, конечно, безголовый хром, работающий на Firebase, не имеет сеанс. Поэтому, когда он пытается выполнить рендеринг: https://myapp.firebaseapp.com/print/plan/123
охранник аутентификации ловит его как не вошедшего в систему и выбрасывает его на экран входа в систему, поэтому, конечно, это то, что Puppeteer возвращает мне на другом конце.
Так каков наилучший способ решить эту проблему?