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

如何解决这个问题?

4

1 回答 1

0

这不是编程问题,我正在为 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预设了会话server_port(可以获得正确的端口),现在通过上面的代码将其用作端口,尝试以下代码可以获得正确的url,登录后可以getUser()。

$login_url = $facebook->getLoginUrl()

PS:如果我自己输入网址似乎还可以

$login_url = $facebook->getLoginUrl(array(
      'scope'         => 'email,publish_stream',
      'redirect_uri'  => $url
));
于 2013-02-12T10:36:00.933 回答