facebook->getUser() 返回 0
Posted
技术标签:
【中文标题】facebook->getUser() 返回 0【英文标题】:facebook->getUser() returning 0 【发布时间】:2014-01-26 19:11:33 【问题描述】:每当我尝试登录时,都会打开一个提示,询问基本权限,然后它会通过 URL 重定向到我的 redirect_uri
=“> HTTP://本地主机/演示/代码= AQDwzia3Wx1BktixF59jVHbm0ViGVJm8Xhb2tNZDyYreZh0KoSJhrSsJ8Aa2KX3gocwR0XNQjQz7ZlBh26_nBi-3iOMByhVO2cxwJ8maC4IHxBacfqXjzqIyBaZQbWKUUxPI6VBrqBgFXQasj7PEtmug7lt93dK4fmMC2A4i2dUYU-gSvzn0f0ZdB3eT_aSvgR1KoLCmQgLh3xix4H05QR6LCP9nLtQC4l9rMJW83kS0PNmWq0COZYvGfuX1R7519Fn3iXRB9F0MTsK1KQ_ulpK84PUCkuMu8et88Lln0ZwuzaPo0oERelkPWYnrrTKa-5W&状态= ed66ea618d8076d9e72c15d9a65a6312# = EM>
即使
这是我的代码
<?php
require_once('php-sdk/facebook.php');
$facebook = new Facebook (array(
'appId' => '1234',
'secret' => '12313',
'cookie' => true
));
?>
<html>
<head> <title> Warming Up with FB API </title> </head>
<body> <h1> Hello World </h1> </body>
</html>
<?php
$loginUrl = $facebook->getLoginUrl(array (
'display' => 'popup',
'redirect_uri' => 'http://localhost/demo'
));
$user = $facebook->getUser();
//echo $user. '</br>';
if ($user)
echo '<em>User Id: </em> '.$user;
else
$loginUrl = $facebook->getLoginUrl(array (
'display' => 'popup',
'redirect_uri' => 'http://localhost/demo'
));
echo '<a href = "'.$loginUrl.'">Login Here </a> ';
?>
我知道这是一个非常微不足道的问题,但我有点卡在这个问题上,无法继续进行下去。请提出建议。
*更新*
将 App Domain 留空解决了我的问题。
【问题讨论】:
【参考方案1】:如果有人仍然在这个问题上大吵大闹,那就是现在出了问题。我受雇来解决这个烂摊子!
在 fb 面板中检查 App domain ,必须与您的应用所在的域匹配。
编辑 base_facebook.php 查找:
公共函数 getAccessToken()
if ($this->accessToken !== null)
// we've done this already and cached it. Just return.
return $this->accessToken;
// first establish access token to be the application
// access token, in case we navigate to the /oauth/access_token
// endpoint, where SOME access token is required.
$getApplicationAccessToken = $this->getApplicationAccessToken();
$this->setAccessToken($getApplicationAccessToken);
$user_access_token = $this->getUserAccessToken();
if ($user_access_token)
$this->setAccessToken($user_access_token);
return $this->accessToken;
到::
public function getAccessToken()
if ($this->accessToken !== null)
// we've done this already and cached it. Just return.
return $this->accessToken;
// first establish access token to be the application
// access token, in case we navigate to the /oauth/access_token
// endpoint, where SOME access token is required.
$getApplicationAccessToken = $this->getApplicationAccessToken();
$this->setAccessToken($getApplicationAccessToken);
$user_access_token = $this->getUserAccessToken();
if ($user_access_token)
//$this->setAccessToken($user_access_token);
$this->accessToken = $user_access_token; //edit; msolution
return $this->accessToken;
-
接下来找到函数:getAccessTokenFromCode()
找线:
parse_str($access_token_response, $response_params);
替换为:
//parse_str($access_token_response, $response_params); //edit:: msolution;;
$response_params = json_decode($access_token_response, true );
评论原文并添加json_decode
就是这样!
【讨论】:
哥们,你救了我的命。谢谢【参考方案2】:如果用户已登录并且仍然获得 $user = 0 我在不同的场合遇到过这个问题,但并不是每个人都会遇到 SDK 问题。所以我不确定这里出了什么问题。但我稍微深入研究了一下,找到了如下所述的解决方案。
解决方案:在为这个问题尝试了许多解决方案之后,这对我有用。
在 base_facebook.php 文件中,找到 makeRequest() 方法并检查以下行。
$opts = self::$CURL_OPTS;
紧随其后,添加这一行
$opts[CURLOPT_SSL_VERIFYPEER] = false;
更多细节可以在这里找到 - http://net.tutsplus.com/tutorials/php/how-to-authenticate-your-users-with-facebook-connect/
【讨论】:
【参考方案3】:改变这个
$loginUrl = $facebook->getLoginUrl(array (
'display' => 'popup',
'redirect_uri' => 'http://localhost/demo'
));
到
$loginUrl = $facebook->getLoginUrl(array (
'display' => 'popup',
'redirect_uri' => 'http://localhost/demo/index.php'
));
看看这是否有效!
【讨论】:
我也试过了,但没用。我收到了一个类似localhost/demo/?code=xyzxzxz 的网址 你的redirect url必须与设置中的canvas url匹配,不需要提供像/demo/?code=xyzz这样的URL 对不起。实际上代码参数太长了,所以我认为截断它会更好。但是我更正了画布 url 设置。 在有效 OAuth 重定向 URI 下,您可能需要在高级设置中输入重定向 url hmm 画布 URL 和域的设置是什么?【参考方案4】:几个小时后,我的解决方案是(假设我的网站是http://www.site123.com):
设置@https://developers.facebook.com
-
应用域:site123.com(即使是空白也可以)
站点 URL:http://site123.com 重要:不是http://www.site123.com
PHP 代码 - fb_config.php
//Declarations
$app_id = "you AppID";
$app_secret = "your App Secret";
$site_url = "http://site123.com/receive_data_from_facebook.php";
//New Facebook
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => TRUE, /* Optional */
'oath' => TRUE /* Optional */
));
//Login URL
$loginUrl = $facebook->getLoginUrl(array(
'scope' => 'email,user_birthday',
'redirect_uri' => $site_url,
));
//Get FacebookUserID
$fbuser = $facebook->getUser();
重要提示另外:即使我的代码在 Chrome 上运行,我也遇到了 Firefox $facebook->getUser() 为 0 的问题。但是在清理了 Firefox 缓存之后,效果很好!
希望对你有帮助。
【讨论】:
【参考方案5】:它可以使用
$opts[CURLOPT_SSL_VERIFYPEER] = false; after $opts = self::$CURL_OPTS; on file base_facebook.php.
【讨论】:
我不明白你的回答,能否请你更具体和详细一点?看看其他答案,看看你是否添加了一些有用的东西。以上是关于facebook->getUser() 返回 0的主要内容,如果未能解决你的问题,请参考以下文章