2013-02-11 7 views
0
$url = 'http://xxxxxx.com:8052/php/myproject/'; 

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

$facebook->getUser() будет 0. Это потому, что мой сервер использует порт 8052 для HTTP (Sharing IP с другим сервером)getLoginUrl() не работает/GetUser() возвращает 0

Это не работает если я использую номер порта в redirect_uri.

Я уверен, что настройка домена корректно на Facebook.com

Как решить эту проблему?

ответ

0

Это не проблема программирования, я использую порт для сервера tomcat. 8052-> tomcat Вы не можете получить правильный порт 8052, если используете порт вперед, всегда получаете 80 по php-коду.

В Facebook SDK, base_facebook.php

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

Вы можете видеть, что это будет получить URL из функции getCurrentUrl, перейдите редактировать

// 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; 

Я предварительно сеанса SERVER_PORT с помощью JavaScript (может получить правильный порт), теперь используйте его как порт по вышеуказанному коду, попробуйте следующий код, который может получить правильный url, который может getUser() после входа в систему.

$login_url = $facebook->getLoginUrl() 

PS: Кажется, все в порядке, если ввод URL моей самости

$login_url = $facebook->getLoginUrl(array(
     'scope'   => 'email,publish_stream', 
     'redirect_uri' => $url 
)); 
Смежные вопросы