$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上的域名设置是正确的
如何解决这个问题?
答案 0 :(得分:0)
这不是编程问题,我正在为tomcat服务器使用port forward。 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
));