0

ユーザーが自分のFacebookアカウントでログインできるWebサイトを作成しようとしています。ウェブサイトにないときはリクエストをしたり情報を保存したりする必要がないので、データベースは必要ありません。

Facebookでのログインのみを受け入れ、他のログインタイプは必要ありません。ログインページのFacebookボタンを使用した通常のログインと、複数のページにまたがってログインし続ける機能が必要になります。ログアウト機能も追加したいのですが。

PHP SDKをダウンロードし、ページでJavaScript SDKを一緒に使用していますが、非常に問題があります。

それは私だけですか、それともFacebook SDKは完全にダメですか?

私の最初の問題は、ログインページのJavaScript SDKが、認証後にユーザーをメインページにリダイレクトしないことです。現在、ページを手動で更新しています(PHP SDKは、ユーザーがログインしていることを認識し、ユーザーをメインページに送信します)。

もう1つの問題はログアウトです。PHP SDKのgetLogoutURL()関数を使用していて、ユーザーをFacebookからログアウトしますが、アクセストークンはまだ完全に有効であり、PHPはユーザーをログインページに送信することを拒否します。なんで?何も思いつきません。個人的には、Facebookではなく私のWebサイトからユーザーをログアウトさせたいと思います。

Facebookでシームレスなログインシステムを作ろうとしていますが、困っています!FacebookConnectで良いドキュメントがまったく見つからないようです。私は彼らの例を使用していて、このような問題が起こっています。たぶん彼らは良いSDKを作ることができないでしょう。PHPSDKとJavaScriptSDKを使用して、非常に優れたユーザーエクスペリエンスを実現したいのですが、それは不可能なようです。

login.phpのPHPコード

require_once("../fb-sdk/src/facebook.php");

$Facebook = new Facebook(array(
  'appId'  => 'xx',
  'secret' => 'xx',
));

$User = $Facebook->getUser();

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

if ($User)
{
  header("Location: index.php");
}

?>

login.phpのJavaScriptコード

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'xx', // App ID
      channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });
  };
  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));
</script>
<div class="fb-login-button">Login with Facebook</div>

index.phpのPHPコード

require_once("../fb-sdk/src/facebook.php");

$Facebook = new Facebook(array(
  "appId"  => "xx",
  "secret" => "xx",
));

$User = $Facebook->getUser();

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

if (!$User)
{
  header("Location: login.php");
}

?>
4

1 に答える 1

1

コールバックを取得するには、ログインイベントをサブスクライブする必要があります。その後、ページを更新できます。また、ログアウトの場合は、Facebookログインの横にあるログインログアウトに独自のSESSIONサイトを使用する必要があるため、この関数を呼び出してFacebookからユーザーIDを取得した場合(ユーザーがFacebookでログインしていることを意味します)としましょう。

$User = $Facebook->getUser();

次に、セッションでこのような設定を行い、この変数を使用して、Webでのユーザーのログインステータスを確認します。

$_SESSION['LOGIN'] = 1;

ログアウトすると、この変数の設定を解除するか、セッションを破棄できます。

PHP/JSのFacebookSDKの詳細を説明するチュートリアルのリンクは次のとおりです。

http://thinkdiff.net/facebook/graph-api-javascript-base-facebook-connect-tutorial/

http://thinkdiff.net/facebook/php-sdk-3-0-graph-api-base-facebook-connect-tutorial/

于 2012-08-12T02:11:11.023 に答える