facebook connect- $ user_id = $ facebook-> getUser();总是返回0

时间:2014-02-23 12:20:03

标签: php facebook oauth facebook-php-sdk facebook-authentication

在我说一些事情之前我想说我的GOOGLEd很多并且发现了很多页面(包括很多问题)和各种各样的解决方案......但是我已经逐一尝试过它们但不幸的是没有他们为我工作

与facebook-php-sdk我正在尝试登录用户。 在最初几次它工作得很好(2到3天前。)今天,当我再次开始使用我的项目时,它不再工作。每当我尝试登录用户$facebook->getUser() is returning 0时。但是3天前它正在运行。

我使用了这里给出的代码:: developers.facebook.com ,是的,我已经对下面的完整代码给出了一些更改

我的代码:: 0auth_provided_by_facebook.php

include_once $_SERVER['DOCUMENT_ROOT'].'dist/facebook-php-sdk/src/facebook.php';

$config = array(
   'appId' => '***********',
   'secret' => '*********',
   'allowSignedRequest' => false, // optional but should be set to false for non-canvas apps
'cookie'    => true,
'oauth'     => true
 );

 $facebook = new Facebook($config);
 $user_id = $facebook->getUser();
 if($user_id) {
   try {

      $user_profile = $facebook->api('/me','GET');

  } catch(FacebookApiException $e) {
    $login_url = $facebook->getLoginUrl(array(
   scope'=>'email,user_location,user_photos,publish_actions,publish_stream,basic_info', 
    'redirect_uri'  => 'http://localhost/dist/include/0auth_provided_by_facebook.php'
    ));
    echo '<a href="' . $login_url .'"> PLEASE CLICK HERE </a>';
    error_log($e->getType());
    error_log($e->getMessage());
  }   
} else {

  $login_url = $facebook->getLoginUrl(array(
    'scope'     => 'email,user_location,user_photos,publish_actions,publish_stream,basic_info', 
    'redirect_uri'  => 'http://localhost/dist/include/0auth_provided_by_facebook.php'
    ));
  echo '<a href="' . $login_url .'"> PLEASE CLICK HERE </a>';

}

OUTPUT:getUser()始终返回0.


我的登录流程如何运作如下所述:

点击<a href="login_fb">Login using fb </a>控件后转到我的localhost/dist/index.php现在我的index.php include上面的wriiten代码,该代码位于此文件的不同目录localhost/dist/include/0auth_provided_by_facebook.php中我处理所有内容。登录成功和失败后,facebook会在此返回值。然后在成功登录时,用户再次被重定向到主页


现在,这是我启用或停用或更改的应用设置的完整列表

 1. App Domains : blank(according to the answer)
 2. Site URL : `http://localhost/dist/include/0auth_provided_by_facebook.php?` 
 3. Native or desktop app? Disabled
 4. Deauthorize Callback URL : `http://localhost/dist/include/0auth_provided_by_facebook.php?`
 5. Social Discovery : enabled
 6. Client OAuth Login : enabled
 7. Embedded browser OAuth Login :enabled
 8. App Secret Proof for Server API calls :enabled
 9. Require 2-factor reauthorization : disabled
10. Valid OAuth redirect URIs :`http://localhost/dist/include/0auth_provided_by_facebook.php?` (according to the suggesion given in the answer)
11. Stream post URL security : enabled

这些是细节。 $user_id = $facebook-> getUser();始终在所有情况下都返回0。我怎么解决呢?

<小时/> 更多信息..虽然我不知道它会帮助你不...我正在通过我的base_facebook.php,我发现它返回零因为if(signed_request)总是假的。

4 个答案:

答案 0 :(得分:0)

要解决此问题,您需要执行以下操作

更改

$login_url = $facebook->getLoginUrl(array(
    'scope'     => 'email,user_location,user_photos,publish_actions,basic_info', 
    'redirect_uri'  => 'http://localhost/dist/'
    ));

$login_url = $facebook->getLoginUrl(array(
    'scope'     => 'email,user_location,user_photos,publish_actions,basic_info', 
    'redirect_uri'  => 'http://localhost/dist/index.php'
    ));

在以下设置中将域名留空。不要给localhost.com

App Domains : localhost.com

然后

Valid OAuth redirect URIs :http://localhost/dist/

Valid OAuth redirect URIs :`http://localhost/dist/index.php

现在尝试一下。

答案 1 :(得分:0)

从应用配置页面更改你的应用秘密。然后在你提到的上一页中使用这个新的应用秘密。删除浏览器中的所有cookie并尝试加载页面,你将得到正确的响应。

答案 2 :(得分:0)

对我来说这听起来是本地主机的问题,如果你可以使用域来测试你的代码我有一个在我的网站上运行的单页登录系统我可以发送给你所有代码,你的代码看起来好看。

答案 3 :(得分:0)

编辑base_facebook.php库并用

替换现有的getCode()函数
protected function getCode() {
$server_info = array_merge($_GET, $_POST, $_COOKIE);
    if (isset($server_info['code'])) {
        if ($this->state !== null && isset($server_info['state']) && $this->state === $server_info['state']) {
            $this->state = null;
            $this->clearPersistentData('state');
            return $server_info['code'];
        } else {
            self::errorLog('CSRF state token does not match one provided.');
            return false;
        }
    }
    return false;
}