2012-02-19 46 views
1

Facebook PHP SDKでユーザーを認証する際に問題があります。Facebook認証が成功した後にユーザーIDを取得できません。

基本的に、ユーザーがまだ認証されていない場合は、「facebookでログイン」ボタンを表示します。それ以外の場合は、ユーザー名を表示します。コードは次のとおりです。

require_once 'facebook.php'; 
$facebook = new Facebook(array(
     'appId' => 'XXX', 
     'secret' => 'XXX', 
     'cookie' => true 
)); 
$userId = $facebook->getUser(); 
var_dump($userId); 
if ($userId) { 
    $userInfo = $facebook->api('/' . $userId); 
    echo "Welcome, {$userInfo['name']}"; 
} else { 
    echo '<a href="' . $facebook->getLoginUrl() . '">' . 
'<img src="images/icon_facebook_login.png" alt="Login with Facebook" /></a>'; 
} 

問題はいつも$facebook->getUser()から0になります。私はbase_facebook.phpのコードを見て、その関数を処理している間に返信URLに要求パラメータのsigned_requestが必要です。 Facebookの返品URLに表示される唯一のパラメータはcodestateです。

私はどんなアイデアを台無しにしたでしょうか?前もって感謝します。

EDIT:ogiによって示唆されるように私はgraph.facebook.com/oauth/access_tokencodeのparamと手作りの要求をしたと私はaccess_tokenを受け取りました。さて、残っている唯一の質問は、PHP SDKを通してこれを達成する方法です。

答えて

0

このつの完全なコントロールを使用することができ、問題は、私はfacebook.phpbase_facebook.phpディレクトリにfb_ca_chain_bundle.crtファイルをコピーしませんでした住む。 getAccessTokenFromCode()ではfacebook.com/oauth/access_token...へのコードは失敗しますが、例外を捕捉するので、把握するのは非常に困難です。

これにより、コードトレースの時間が節約できます。

2

キャンバスアプリ(Facebookのアプリ)は、常にトップフレームからsigned_requestをFacebookから受信します。

外部のウェブサイトでは表示されません。ユーザーがアプリを承認した後、彼らはcodeを返します。明らかにあなたもそうです。

認証の最後のビットはをaccess_tokenに交換しています。これは自分でテストする必要があります。だからあなたのブラウザで次の要求からコードを取得し、試してみてください。

https://graph.facebook.com/oauth/access_token? 
    client_id=YOUR_APP_ID&redirect_uri=YOUR_URL& 
    client_secret=YOUR_APP_SECRET&code=THE_CODE 

何を得るを参照してください

redirect_uriは、ユーザーIDを取得していないのと同じURLを使用するため)。あなたが開発している間、そして、あなたの質問にアップデートを投稿し、そして私たちは、あなたがそれをやっていない場合は

EDIT

:-)参照してくださいよ、それはPHPのディスプレイにすべてのエラーを持っていることが重要です。 (あなたのphp.iniの)

error_reporting = E_ALL 

認証の最後のビットは、HTTPSを介してアクセストークンを取得するためにcurlを使用しています。私はカール専門家ではないんだけど、これは、SSLの問題を克服することができます:あなたはOUTHを使用しているため

Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 
Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2; 
+0

回答ありがとうございましたori。私は 'access_token'を受け取ります。今、PHP SDKを通してこのリクエストを行う方法は? –

0

$userInfo = $facebook->api('/me'); 

にこの

$userInfo = $facebook->api('/' . $userId); 

変更するには、この行を変更してくださいあなたのapiの別のものではありません。

その後、

echo $userInfo['id'] 

試すか、あなたは

<?php 
    require 'fb/facebook.php'; 

    // Create our Application instance (replace this with your appId and secret). 
    $facebook = new Facebook(array(
     'appId' => 'xxx', 
     'secret' => 'xxx', 
    )); 

    // Get User ID 
    $user = $facebook->getUser(); 

    // We may or may not have this data based on whether the user is logged in. 
    // 
    // If we have a $user id here, it means we know the user is logged into 
    // Facebook, but we don't know if the access token is valid. An access 
    // token is invalid if the user logged out of Facebook. 

    if ($user) { 
     try { 
     // Proceed knowing you have a logged in user who's authenticated. 
     $user_profile = $facebook->api('/me'); 
     } catch (FacebookApiException $e) { 
     error_log($e); 
     $user = null; 
     } 
    } 

    // Login or logout url will be needed depending on current user state. 
    if ($user) { 
     $logoutUrl = $facebook->getLogoutUrl(); 
    } else { 
     $loginUrl = $facebook->getLoginUrl(); 
    } 


echo '<pre>'; 
print_r($user_profile); 

    ?> 
+0

'getUser()'は常に0を返します。あなたの例でも、基本的に同じです。 –

+0

私はこれを私のウェブサイト上にあるように使用していますが、私にfbユーザーの正確なIDを表示しています...あなたの秘密鍵を生成してください。 –

関連する問題