Firebase + Puppeteer + Angular2 +: рендеринг авторизованной страницы и сохранение в формате PDF с использованием безголового хрома - PullRequest
0 голосов
/ 08 ноября 2018

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 возвращает мне на другом конце.

Так каков наилучший способ решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...