这不是编程问题,我正在为 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
));