2012-04-24 24 views
1

HybridAuthを設定しようとしていますが、私は非常に初期段階です。今すぐやりたいことは、HAがフェイスブックにリダイレクトされ、アプリのインストールを促すように接続し、戻ったときにユーザーを認証することだけです。HybridAuth/PHP Facebook SDK認証が失敗しました(getUserが0を返します)

から、私は手動で次のことを呼んでいる:auth.phpはこのようになります http://mydomain.com/auth.php?provider=Facebook

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(); 
    } 
} 

それはそれはで正しいアプリをインストールするために、Facebookやプロンプトに転送することで動作します適切なアクセス許可。それは私のHA設定が正常に動作していることを示しています。アプリを正常にインストールしてから、ページに戻ってメッセージを受け取ります。

Authentification failed! Facebook returned an invalide user id. 

何が得られますか?私のアプリケーションはFBコントロールパネルにも0の追加と0のAPIコールを表示します(このデータは数日遅れているように見えますが)。私はFBが何らかの方法でアプリを有効にするのを待っていますか?私は何か間違っているのですか?

UPDATE

HybridAuthので、私はちょうど全体の式からHAを排除しようとしたFacebookのSDKを使用しています。次の基本的な例を実行:

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); 

私はFacebookにログインしていると私は、アプリケーションが追加されていますが、どんなに私は、ユーザーIDの0を返します。私は、同様のテストユーザーを使用して試した何をすべきか - 無駄に。私がここで不足しているかもしれないサーバー構成の問題がありますか?

答えて

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 
); 
+2

私は同じに走りました(私は推測する)エラー、あなたのソリューションを試してみましたが、残念ながらそれを解決しませんでした。 http://hybridauth.sourceforge.net/support.html?place=msg%2Fhybridauth%2FhNHmvDlveaQ%2FjddxnaL41G0J あなたが見て聖は喫煙 –

+0

を取る可能性がある場合、私は本当に感謝! +1、btw地球上で何があなたをそこに連れて行ったのですか? –

0

私はこのエラーがさえhybridauthやFacebook SDKの現在のバージョンで表示される理由を把握するために管理してきました。

理由は、hybridauthとgoogleまたはfacebook sdkがredirect_uriパラメータをどのように構築するかにあります。 https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/から知っているように、最初にfacebook(redirect_uri paramを使用)にユーザをリダイレクトしなければならず、デフォルトで応答としてコードが返されます。以前に述べた理由のために、curlを使ってhttpリクエストを(redirect_uri paramとともに)もう一度送信し、これらのURLが一致しません。

その他の単語(スラッシュなし)あなたがhybridauth設定 "base_url" => "http://yourhost/hybridauth/hybridauthに設定した場合、」 - >それはGoogleのために正常に動作しますが、あなたのFacebookのログインのため、この愚かなメッセージのエラーになります

"base_url" => "http://yourhost /。 hybridauth/hybridauth/"(スラッシュ付き)はfacebookで正常に動作しますが、" Redirect Uri Missmatch "という明確なエラーが表示されます。

そうではない簡単な修正で最高です"base_url" => "http://yourhost/hybridauth/hybridauth

。configに(スラッシュなし)そしてURIがプロバイダに依存し構築する方法を選択します。Provider_Adapter.phpコメントで

ライン131 // $this->params["login_done"] = $HYBRID_AUTH_URL_BASE . (strpos($HYBRID_AUTH_URL_BASE, '?') ? '&' : '?') . "hauth.done={$this->id}";

、代わりにこれら二つを加える。

$dlm = $this->id == "Facebook" ? "/?" : "?";

$this->params["login_done"] = $HYBRID_AUTH_URL_BASE . (strpos($HYBRID_AUTH_URL_BASE, $dlm) ? '&' : $dlm) . "hauth.done={$this->id}";

FacebookとGoogleの両方をサポートするソリューションがあります。

+0

FBに問題があり、末尾のスラッシュを削除しました。他のプロバイダ(Googleなど)には影響しませんでしたが、FBの問題は解決しませんでした。 –

0

上記の回答がうまくいきませんでした。私は同じ問題に直面していましたが、Facebookの私のアプリはまだサンドボックスモードになっていました。アプリの設定でこれをオフにすると、ユーザーIDが0になるという問題が解決されました。

0

ハイブリッド認証では、範囲パラメータに一連の「0」が追加されます。私はハイブリッド認証コアクラスを変更するこのアイデアはどのように良いですわからないんだけど、ハイブリッド/プロバイダ/ Facebook.phpでloginBegin機能を変更し、それが今で正常に動作している:

function loginBegin() 
{ 
    $parameters = array("scope" => $this->scope, "redirect_uri" => $this->endpoint, "display" => "page"); 
    $optionals = array("scope", "redirect_uri", "display"); 

    foreach ($optionals as $parameter){ 
    if(isset($this->config[$parameter]) && ! empty($this->config[$parameter])){ 
     $parameters[$parameter] = $this->config[$parameter]; 
    } 
    } 

    if (isset($parameters['scope'])) { 
    foreach ($parameters['scope'] as $key => $parameter){ 
     if ($parameter == '0') { 
     $parameters['scope'][$key] = ''; 
     } 
    } 
    } 

    // get the login url 
    $url = $this->api->getLoginUrl($parameters); 

    // redirect to facebook 
    Hybrid_Auth::redirect($url); 
} 
関連する問題