使用Auth所需image processingHTML PDF

我正在用wkhtmlpdf和nodejs创buildpdf文档服务器端。 客户端发送要呈现的html(可能包含img标签与源)。 当用户在浏览器中预览html时,他们上传到他们账户的图像显示正常,因为用户通过浏览器被authentication,节点路由可以简单地根据用户ID(保存到会话)和图像ID (通过每个图像请求)。

问题是当图像试图在wkhtmltopdf webkit中渲染时,渲染器在通过独立的进程通过wkhtmltopdf的节点执行图像请求时未经过validation。 对GET /user/images/<imageId>之类的请求将会失败,因为在headless wkhtmltopdf渲染器内进行请求时会话未被设置。

有没有办法通过一些wkhtmltopdf选项通过身份validation或可能是不同的图像身份validation方式? 唯一的限制是不公开图像。

我问了一个类似的问题,可能会帮助你: 在身份validation墙背后生成PDF

WKHTMLTOPDF有--cookie-jar应该得到你所需要的。 请注意,它不适合我,我用另一个解决scheme解答了我自己的问题。 简而言之,我通过CURL访问页面 – 更加灵活 – 然后编写一个临时文件,然后将其转换为PDF,然后删除临时文件。

一个小圆的回合,但它完成了工作。

为了实现身份validation,我在图像path中允许使用cookie标识(将连接键的默认值connect.sid)作为查询选项。 唯一的“难题”是因为从服务器的angular度要求图像,所以你必须确保所有的图像path是绝对的域path,而不是相对于你的应用程序(除非这两个是相同的当然)。

Expressjs的步骤:

  1. 通过req.query (eg ?id=abc123 where abc123 is the req.cookies['connect.sid'], or req.signedCookies['connect.sid'] if your using a secret as you probably should )设置在标识中查询sid的标识中间件(eg ?id=abc123 where abc123 is the req.cookies['connect.sid'], or req.signedCookies['connect.sid'] if your using a secret as you probably should )您可能需要确保首先设置查询中间件。

  2. 确保req.headers在cookieparsing器之前包含这个会话id key和value,这样会话就可以正确设置了(eg if a cookie exists append a new one or if one does add it as the first req.headers.cookie = 'connect.sid=abc123;')

  3. 确保所有的图像path包含完整的url(eg https://www.yourdomain.com/images/imageId?id=abc123)

一些额外的tid位:图像源replace应该可能发生在服务器级别,以确保用户不会复制/粘贴图像的URL与会话ID,并说电子邮件给一个朋友,这显然留下帐户劫持的大门。