HybridAuth/PHP Facebook SDK身份验证失败(getUser返回0)

Mat*_*ier 1 php openid facebook oauth hybridauthprovider

我正在尝试配置HybridAuth,我还处于早期阶段.现在我要做的就是连接并确保HA将重定向到facebook并提示安装应用程序,然后在用户返回时对用户进行身份验证.

我手动调用以下内容:http: //mydomain.com/auth.php?provider = Facebook

auth.php看起来像这样:

session_start();
require_once($_SERVER['DOCUMENT_ROOT'] . "/func/db_connect.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/api/auth/Hybrid/Auth.php");      // HybridAuth Module 

$hybridauth_config = include($_SERVER['DOCUMENT_ROOT'] . '/api/auth/config.php');

if ($_GET['provider'] == '' || !in_array($_GET['provider'], array_keys($hybridauth_config['providers']))) {
    echo 'Invalid Provider';
} else {
    try { 
        $hybridauth = new Hybrid_Auth($hybridauth_config);

        // try to authenticate with this provider
        $adapter = $hybridauth->authenticate($_GET['provider']);

        // grab user profile
        if ($hybridauth->isConnectedWith($f_provider)) {
            // yep, we're connected.  Add this provider's info to the user_auth table
            echo 'connection successful';
        }

    } catch (Exception $e) {
        echo $e->getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理是它转发到Facebook并提示安装具有适当权限的正确应用程序.这告诉我我的HA配置工作正常.我成功安装了应用程序,然后重定向回页面,我收到消息:

Authentification failed! Facebook returned an invalide user id.
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?我的应用程序在FB控制面板中也显示0个添加和0个API调用(虽然这些数据看起来可能会延迟几天).我在等待FB以某种方式启用应用程序吗?难道我做错了什么?

UPDATE

HybridAuth使用Facebook SDK,所以我试图从整个方程中消除HA.运行以下基本示例:

session_start();

require($_SERVER['DOCUMENT_ROOT'] . "/path/to/fbsdk/facebook.php");
$facebook = new Facebook(array(
  'appId'  => 'myappid',
  'secret' => 'myappsecret',
  'fileUpload' => true
));

$user = $facebook->getUser();
var_dump($user);
Run Code Online (Sandbox Code Playgroud)

我登录到Facebook并且我添加了应用程序,但无论我做什么,用户ID都返回0.我也尝试过使用测试用户 - 无济于事.是否存在我可能缺少的服务器配置问题?

Mat*_*ier 5

我将我的代码移动到另一个应用程序/服务器,然后移动到另一台服务器上的同一个应用程序,一切正常.所以我开始将其视为服务器配置问题.原来Facebook不喜欢我的开发服务器上的自签名证书.

我能够通过改变PHP SDK中的base_facebook.php类并添加curlopt来忽略SSL验证步骤来解决这个问题.见下文:

  public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
    CURLOPT_USERAGENT      => 'facebook-php-3.1',
    CURLOPT_SSL_VERIFYPEER => false
  );
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了同样的(我猜)错误,尝试了你的解决方案,但不幸的是它没有解决它.http://hybridauth.sourceforge.net/support.html?place=msg%2Fhybridauth%2FhNHmvDlveaQ%2FjddxnaL41G0J如果你看看我真的很感激 (2认同)