getLoginUrl()不工作/getUser()返回0


getLoginUrl( ) not working / getUser() return 0

$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 上的域设置是正确的

如何解决这个问题?

这不是编程问题,我正在为tomcat服务器使用端口转发。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预先设置了sessionserver_port(可以得到正确的端口(,现在用上面的代码作为端口,尝试下面的代码可以得到登录后可以得到getUser((的正确url。

$login_url = $facebook->getLoginUrl()

PS:如果通过我自己的输入url似乎没问题

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