关于嵌入tableau报表的票证获取以及自动登录解决。

1、首先,我们知道tableau是要登录才能看到报表的。
关于嵌入tableau报表的票证获取以及自动登录解决。_第1张图片
如果你通过用户名和密码进行登录后,相关的token会保存在本地浏览器,下次可以直接打开不用登录。

2、但是,如果我们想把tablau的报表嵌入到我们自己的开发网站中,就不能手动登录了,要用到tableau另一种登录方法------ ticket票证方式。

①主要步骤是,先访问http://tabserv/trusted (如果启用 SSL,则必须使用 https 而不是 http。例如: https://tabserv/trusted。),去拿到相应的票证ticket. 注意这个tabserv是你自己的域名或者ip地址,后面要跟一个trusted才能拿到票证。

 let res = await ctx.curlPost(YourtableauTicketUrl, { username: 'yourusername',target_site:YourSite }, 'POST', { 'Content-type': 'application/x-www-form-urlencoded'})
console.log("返回的ticket票证:  "+res.data)
username=<username> (必需):Tableau Server 许可用户的用户名。如果使用的是本地身份验证,
则用户名可以是简单字符串(例如,username=jsmith)。如果将 Active Directory 用于多个域,
则用户名中必须包含域名(例如,username=MyCo\jsmith)。

target_site=<site id> (如果视图不在默认站点上,则为必需):如果 Tableau Server 运行多个站点,
并且视图位于默认站点之外的其他站点上(例如,target_site=Sales),则指定包含该视图的站点。
用于 <site id> 的值应为创建该站点时提供的站点 ID。此值区分大小写。
如果站点 ID 为 SAles,则 target_site=SAles。

client_ip=<IP address> (可选):用于指定 Web 浏览器要访问该视图的计算机的 IP 地址
(例如,client_ip=123.45.67.891)。该地址不是发出 Tableau Server 的 POST 请求的 Web 服
务器 IP 地址。

注意: 一般target_site是你设置的site名字,但是那个site如果是默认站点,target_site也可以为空的。
所以我们可以通过前端传过来的url,再用正则表达式动态获取url中的site名字。通过这个site名字去经过post方法访问trusted那个网站,拿到相应的tikcet票证。
票证大概长这个样子: 9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5

②拼接url
在前面我们已经拿到了票证ticket,接下来我们要拼接正完整的url

下面是如何指定用户仅通过 Tableau Server 访问的视图的示例。
http://<server_name>/trusted/<unique_ticket>/views/<workbook_name>/<view_name> 

如果 Tableau Server 正在运行多个站点,并且该视图位于 Default 站点之外的其他站点上,
则需要向该路径添加 t/<site_id>。例如:
http://<server_name/trusted/<unique_ticket>/t/Sales/views/<workbook_name>/<view_name> 
其中这个/t//views/之间的字母就是你设置tableau的site名字。

在html中

默认站点:
<iframe src="http://tabserver/trusted/9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5/views/workbookQ4/SalesQ4?:embed=yes"></iframe> 

多个站点:
<iframe src="http://tabserver/trusted/9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5/t/YourSiteName/views/workbookQ4/SalesQ4?:embed=yes"></iframe> 

如果想了解更多,清查看tableau的官网链接

你可能感兴趣的:(vue,前端,vue,node.js,javascript,vue.js)