Это не проблема программирования, я использую порт для сервера 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
));