2011-08-20 11 views
13

私はFacebookログインボタンプラグインを使用していますと私は成功した上記使用してログインおよびログアウトすることができていますJavaScriptのSDKfacebookログインボタンプラグインを使用してユーザーの基本情報を取得しますか?ここで

初めてユーザーが認証プロセスを完了したときに、ユーザーの基本情報、つまりFacebookのログイン名、メールアドレスをデータベースに保存する必要があります。

どうすればいいのか教えてください。

<p><fb:login-button autologoutlink="true"></fb:login-button></p> 


    <div id="fb-root"></div> 
    <script> 
     window.fbAsyncInit = function() { 
      FB.init({ appId: '123456', status: true, cookie: true, 
       xfbml: true 
      }); 
     }; 


     (function() { 
      var e = document.createElement('script'); 
      e.type = 'text/javascript'; 
      e.src = document.location.protocol + 
      '//connect.facebook.net/en_US/all.js'; 
      e.async = true; 
      document.getElementById('fb-root').appendChild(e); 
     }()); 
    </script> 

答えて

14

Subscribe to the eventauth.login。これを行うと、Facebookはログイン後にあなたのハンドラを呼び出します。

このハンドラでは、希望する情報を得るためにGraph APIを呼び出すためのuse FB.apiがあります。たとえば、2番目の例に示すように/meを呼び出すと、ログインしたユーザーに関する基本情報が表示されます。

これですべてのデータがJavaScriptに保存されました。これをサーバーに送信するには、普通のXMLHttpRequest/AJAXリクエストを実行します。あなたのJavaScriptライブラリはおそらくこれを簡単にします - これはjQuery.ajax()ですが、最悪の場合はuse XHR directlyです。

これで、サーバー上にデータがあり、データベースに保存するなど、必要な操作を行うことができます。データを一度保存​​するだけの場合は、そのユーザーIDに関する情報がまだ格納されていないことを確認してください。

+10

@Jon Watteの回答ごとに、AJAX経由でこのように送信されたユーザー情報c信頼できない。 FacebookのユーザーIDとアクセストークンだけをサーバーに送信し、サーバー側のAPI呼び出しでユーザー情報を参照する方がよいでしょう。 – grossvogel

+0

Facebookで直接もっとエレガントな方法はありませんか?この解決策は非常に安全ではありません – basZero

3

解決策には穴があります。これは、ユーザーが望む情報をすべて補完してXHRを自分のサーバーに戻すことができることを意味します。サーバーはFacebookと直接確認する必要があります。

+0

これはコメントだったはずですので、私は上記の答えに1つ追加しました。 – grossvogel

+0

ほとんどのサイトでFBログインまたは手動フォームログインが使用されています。 FBログインを安全なものにすることは重要ではありません。彼らがやりたいことがあれば、手動でログインするだけです。他のセキュリティではなく、セキュリティを強化する意味がありません。心に留めておくべきこと - あなたの弱いリンクよりも決して安全ではありません。 –

5

PHP SDKとJS SDKの組み合わせを使用することもできます。後者は、ログインと以前のデータをサーバーに保存します。

<?php 
require_once 'config.php'; 
require_once 'lib/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => FB_APP_ID, 
    'secret' => FB_APP_SECRET, 
)); 


?> 
<!DOCTYPE html> 
<html xmlns:fb="http://www.facebook.com/2008/fbml"> 
<body> 

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId:'<?php echo $facebook->getAppID() ?>', 
      cookie:true, 
      xfbml:true, 
      oauth:true 
     }); 
     FB.Event.subscribe('auth.login', function (response) { 
      window.location = "showUser.php"; //redirect to showUser.php on Login 
     }); 
     FB.Event.subscribe('auth.logout', function (response) { 
      window.location.reload(); 
     }); 
    }; 
    (function() { 
     var e = document.createElement('script'); 
     e.async = true; 
     e.src = document.location.protocol + 
      '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 
<div class="fb-login-button" data-show-faces="true" data-width="200" 
    data-max-rows="1"></div> 
</body> 
</html> 

そしてshowUser.phpであなたのようなものがあります:

<?php 
#showUser.php 
require_once 'config.php'; 
require_once 'lib/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => FB_APP_ID, 
    'secret' => FB_APP_SECRET, 
)); 

$user = $facebook->getUser(); 

if($user) 
{ 
    if ($user) { 
     try { 
      // Proceed knowing you have a logged in user who's authenticated. 
      $user_profile = $facebook->api('/me'); 
      var_dump($user_profile); //You can now save this data 
     } catch (FacebookApiException $e) { 
      echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; 
      $user = null; 
     } 
    } 
} 

?> 
+0

ここで参照したconfig.phpファイルとは何ですか? App IDと秘密鍵は既に含まれています。インクルードのすぐ下にあります。 –

+0

いいえ、includesの下に、FacebookのコンストラクタにApp IDと秘密鍵を渡します。それらはconfig.phpで定義されています – JustB

0
//very simple just change this line 
fb:login-button autologoutlink="true" 

//with this one 

FB:ログインボタンautologoutlink = "本当の所" OnLogin = 'your_ajax_fun_that_store_in_db()'

を何かのように
function your_ajax_fun_that_store_in_db(){ 
    FB.api('/me', function(response) { 
    $.post("ajax/store_user_info.php",response, function(data) { 
    //write you js code here ! 
    //you can use the (response) from facebook directly in your store_user_info.php as it will be sent in POST array 
    }); 
}); 
} 
//last thing when you face such a problem the first thing to do is to go back to facebook reference of fun. 
関連する問題