堆栈:
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在另一端返回给我的内容。
那么解决这个问题的最佳方法是什么?