getLoginUrl()not working / getUser()返回0

时间:2013-02-11 14:30:28

标签: php facebook tomcat login facebook-php-sdk

$url = 'http://xxxxxx.com:8052/php/myproject/';

$loginUrl = $facebook->getLoginUrl(array(
'scope' => 'publish_stream,email',
'redirect_uri' => $url,
));

$facebook->getUser()将为0。 这是因为我的服务器使用端口8052进行http(与其他服务器共享IP)

如果我在redirect_uri使用端口号,无效。

我确信Facebook.com上的域名设置是正确的

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这不是编程问题,我正在为tomcat服务器使用port forward。 8052-> Tomcat的 如果您正在使用端口转发,则无法获得正确的8052端口,请始终通过php代码获取80.

在Facebook SDK中,base_facebook.php

public function getLoginUrl($params=array()) {
    $this->establishCSRFTokenState();
    $currentUrl = $this->getCurrentUrl();

你可以看到从函数getCurrentUrl获取url,去编辑它

// use port if non default
if(isset($_SESSION['server_port'])){
    $port = $_SESSION['server_port'];
}else{
    $port =
      isset($parts['port']) &&
      (($protocol === 'http://' && $parts['port'] !== 80) ||
       ($protocol === 'https://' && $parts['port'] !== 443))
      ? ':' . $parts['port'] : '';
}
// rebuild
return $protocol . $parts['host'] .':'. $port . $parts['path'] . $query;

我使用javascript(可以获得正确的端口)预设会话server_port,现在通过上面的代码使用它作为端口,尝试以下代码可以获得正确的URL,登录后可以获取getUser()。

$login_url = $facebook->getLoginUrl()

PS:如果我自己输入网址似乎没问题

$login_url = $facebook->getLoginUrl(array(
      'scope'         => 'email,publish_stream',
      'redirect_uri'  => $url
));