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的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Facebook PHP SDK getUser 总是返回 0?

如何清除 Facebook App 对象的数据

检查用户是否喜欢页面| PHP | Facebook

await 函数不返回值

Auth0 规则 - 从 getUser() 读取元数据

Symfony2 服务构造函数中的 getUser