[英]Tableau Tickets - POST to get ticket returning login form, not ticket ID
我发现StackOverflow上没有很多Tableau专家,但也许有人之前有过这个问题,并且知道解决方案。 我是Tableau的总菜鸟,所以请原谅我,如果这个问题是无聊的。 提前致谢!
系统
我们设置Tableau的方式是在与Web服务器分开的服务器上。 该应用程序是用PHP编写的,使用CakePHP 2.2.0稳定版。
10.0.0.10 - webserver
10.0.0.11 - tableau
为了让客户端查看Tableau生成的报告,我们使用受信任的身份验证票证系统,在该系统中,客户端将获得具有特定票证的URL。 然后,客户端使用此票证直接向tableau服务器询问报告。
一个例子:
问题
问题是:当代码请求表格票号(上面的步骤2和3)时,Tableau服务器将使用身份验证页面而不是票证ID进行响应。 如果我在$ postdata数组中注释掉“target_site”参数,则tableau不会使用登录页面进行响应,而只是简单地说“-1”。
用于生成可信URL的PHP代码:
<?php
public function get_trusted_url($view = 'book2sheet1') {
$email = $this->Auth->user();
$email = $email['Email']; //This email is registered as a Tableau user!
$postdata = http_build_query(
array(
'username' => $email,
'target_site' => 'oursite', //If I comment this line out, Tableau no longer returns an auth page and instead simply returns "-1"
'client_ip' => $_SERVER['REMOTE_ADDR']
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$ticket = file_get_contents('http://10.0.0.11/trusted/', false, $context);
if($ticket > 0) {
return 'http://tableau.example.com/t/rg/trusted/' . $ticket . '/' .$view . '?:embed=yes&:comments=no&:toolbar=yes';
} else {
echo 'failure'; //debug
print_r($ticket); //debug - this prints out the auth page
return false;
}
}
任何帮助将不胜感激! 正如我所提到的,我是Tableau的总菜鸟:)
返回的登录html的图像,使用print_r('ticket')
转储到页面
谢谢!
我要做的第一件事就是确保Trusted Ticketing在真空中工作。 这个链接http://ttrequest.notlong.com将让您进入一个文件夹,其中包含一个简单的HTML / JavaScript页面,您可以使用该页面确保正确配置所有内容。 然后,仔细查看您的代码。
为target_site提供值(即使是零长度字符串)也是必要的,因为它告诉我们您要为哪个Tableau站点请求票证。 空白/零长度字符串=“默认网站”,基本上。
我知道PHP很少,但Tableau提供了一些我过去使用的示例代码。 它不使用file_get_contents()
来执行POST,而是依赖于http_parse_message()
......它适用于我:
Function get_trusted_ticket_direct($server, $user, $targetsite) {
$remote_addr = $_SERVER['REMOTE+ADDR'];
$params = array(
'username' => $user,
'client_ip' => $remote_addr,
'target_site' => $targetsite
);
$ticket= http_parse_message(http_post_fields("http://$server/trusted", $params))->body;
if ($ticket > 0) {
return $ticket;
}
else
return 0;
}
老实说,我不知道file_get_contents()是否被视为比PHP社区中的http_parse_message()更好的方法(也许有人可以对此发表评论),但示例代码是可靠的,除了它仍然没有' t包括对target_site参数的引用(因为它是在Tableau具有多租期之前编写的)。
示例代码可以在C:\\ Program Files(x86)\\ Tableau \\ Tableau Server \\ 7.0 \\ extras \\ embedding \\ php中找到
祝好运!
您必须使用网站ID而不是“名称”。 还要注意网站名称和ID不是同一个字符串,因为返回了html页面; 确保您的网站名称和ID不同!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.