Firebase + Puppeteer + Angular2 +:渲染登录页面并使用无头Chrome浏览器另存为PDF

时间:2018-11-08 02:44:17

标签: angular firebase puppeteer

堆栈:

Angular6 + Firebase +木偶

背景

我正在尝试将特定于我应用程序中任何登录用户的计划页面打印为url中的PDF。例如:https://myapp.firebaseapp.com/print/plan/123

我在的位置:

我刚刚在Firebase上成功设置了Puppeteer,它现在将呈现一个网站页面,将其转换为PDF并将其流式传输回Firebase Function的前端-一切正常。

这是我的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上运行的无头chrome并不能开会。因此,当它尝试呈现:https://myapp.firebaseapp.com/print/plan/123时,auth防护将其捕获为未登录状态并将其丢弃到登录屏幕,因此,这正是Puppeteer在另一端返回给我的内容。

那么解决这个问题的最佳方法是什么?

0 个答案:

没有答案