6

私はこの問題の解決策を何時間も探していましたが、私に役立つものを見つけることができません。サイトで[ログアウト]をクリックしても、ユーザー情報は引き続き表示され、ログアウトボタンは引き続き表示されます。コードは次のとおりです。

require 'facebook-php-sdk/src/facebook.php';

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

// Get User ID
$user = $facebook->getUser();
var_dump($user);
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 ($_GET['logout'] == "yes") {
setcookie('fbs_'.$facebook->getAppId(), '', time()-100, '/', 'http://gno.....ment/index.php');
session_destroy();
header("Location: ".$_SERVER['PHP_SELF']."");
}

if ($user_profile) {
  $logoutUrl = $facebook->getLogoutUrl;
} else {
  $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,publish_stream,user_status',
  'canvas' => 1,
  'fbconnect' => 0,
  'redirect_uri' => 'http://gno.....ment/index.php'));
}

........。

<?php if ($user): ?>
<h3>You</h3>
<img src="https://graph.facebook.com/<?php echo $user; ?>/picture">

<h3>Your User Object (/me)</h3>
<pre><?php print_r($user_profile); ?></pre>
<?php else: ?>
<strong><em>You are not Connected.</em></strong>
<?php endif ?>

<?php if ($user): ?>
<a href="<?php echo $logoutUrl; ?>">Logout of FB</a>
<?php else: ?>
<div>
Login using OAuth 2.0 handled by the PHP SDK:
<a href="<?php echo $loginUrl; ?>">Login with Facebook</a>
</div>
<?php endif ?>

それif ($_GET['logout'] == "yes")が私にとっての答えかもしれないようですが、私はそれを機能させることができません。logoutどこから得られたのか、どこで定義されているのかわかりませんか?

これはよくある問題のようですが、私には理解できません。助けていただければ幸いです。

4

8 に答える 8

20

PHP SDKを使用してそれを行うのは本当に簡単で、ドキュメントは本当にひどいものです。Facebookにリダイレクトする必要はありません。Facebookクラスが設定するセッションをクリアする必要があります。そのための関数は、destroySession()と呼ばれるFacebook基本クラスにあります。ここで私はgetでそれをやっています。

require_once('libs/facebook.php');

$facebook = new Facebook(array(
    'appId'  => '1121111110112',
    'secret' => 'bcfsaasaaaaaa2b7adsae3a4dd5'
)); 

if(isset($_GET['action']) && $_GET['action'] === 'logout'){
    $facebook->destroySession();
}

$ facebook-> getLogoutUrl()は、ユーザーをFacebookからログアウトします。

于 2012-12-18T23:01:52.860 に答える
3

この問題は、外部ログアウト問題を指定することで解決できます。あなたはここで見ることができます

詳細については。これは、この問題の優れたチュートリアルです。

お役に立てれば

于 2012-04-28T19:54:55.160 に答える
2

あなたの質問に直接答えるために

...ログアウトがどこから取得されているのか、どこで定義されているのかわかりませんか?

ログアウトURLを作成するときに、パラメーター「logout」を追加します。

$logoutUrl = $facebook->getLogoutUrl(array(
    'next'=>'http://yourdomain.com/facebook-test-search.php?logout=yes'
));

次に、スクリプトで、次の場合にセッションとCookieをクリアします。isset($_GET['logout'])

于 2012-05-04T20:48:20.427 に答える
2

最新のPHP-SDKを使用してログアウトする方法は次のとおりです。

login.php

require_once("php-sdk/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) {
    $logout_params = array('next'=>'http://www.pittsburghpartycentral.com/logout.php');
  $logoutUrl = $facebook->getLogoutUrl($logout_params);
} else {
    $login_params = array(
                        'scope' => 'email',
                        'display' => 'popup'
                        );
  $loginUrl = $facebook->getLoginUrl($login_params);
}

// This call will always work since we are fetching public data.
$naitik = $facebook->api('/naitik');

?>
<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
  <head>
    <title>php-sdk</title>
    <style>
      body {
        font-family: 'Lucida Grande', Verdana, Arial, sans-serif;
      }
      h1 a {
        text-decoration: none;
        color: #3b5998;
      }
      h1 a:hover {
        text-decoration: underline;
      }
    </style>
  </head>
  <body>
    <h1>php-sdk</h1>
    <?php if ($user): ?>
      <a href="<?php echo $logoutUrl; ?>">Logout (<?php echo $user_profile[first_name]; ?>)</a>
    <?php else: ?>
      <div>
        Login using OAuth 2.0 handled by the PHP SDK:
        <a href="<?php echo $loginUrl; ?>" onclick="javascript:void window.open('<?php echo $loginUrl; ?>','fb_popup','width=600,height=300,toolbar=0,menubar=0,location=0,status=0,scrollbars=0,resizable=0,left=0,top=0');return false;">Login with Facebook</a>
      </div>
    <?php endif ?>

    <h3>PHP Session</h3>
    <pre><?php print_r($_SESSION); ?></pre>

    <?php if ($user): ?>
      <h3>You</h3>
      <img src="https://graph.facebook.com/<?php echo $user; ?>/picture">

      <h3>Your User Object (/me)</h3>
      <pre><?php print_r($user_profile); ?></pre>
    <?php else: ?>
      <strong><em>You are not Connected.</em></strong>
    <?php endif ?>

    <h3>Public profile of Naitik</h3>
    <img src="https://graph.facebook.com/naitik/picture">
    <?php echo $naitik['name']; ?>
  </body>
</html>

logout.php

<?php 
    session_start();            //start session
    $_SESSION = array();    //clear session array
    session_destroy();      //destroy session
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Log Out</title>
</head>

<body>
<p>You have successfully logged out!</p>
<p>Return to the <a href="connect.php">connect</a> page</p>

</body>
</html>
于 2013-07-10T17:56:48.043 に答える
1

以下を使用して、アプリからユーザーをログアウトできました。

$facebook->destroySession();

The

$facebook->getLogoutUrl();

アプリからではなく、Facebookからユーザーをログアウトさせます。

于 2013-09-21T23:07:40.277 に答える
0

それに似たような問題がありました。平

$facebook->destroySession();

削除するまで正しく機能しませんでした

$facebook->getLogoutUrl();

完全に呼び出します。getLogOutUrl()後で.htaccessと競合し、* "mod_fcgid:stderr:CSRF状態トークンが提供されたものと一致しません"*エラーにつながるパラメータを追加しました。

于 2014-01-06T22:28:18.407 に答える
0

2016年にCentOS6.7サーバーにPHP5.3がまだあり、PHPバージョンをアップグレードする手間をかけたくないので、新しいfacebook/facebook-phpの代わりに古いfacebookarchive / facebook-php-sdkを使用します-sdk-v4ライブラリ。

そして、これが私のアプリでログアウトを処理する方法です:

<?php

require_once('facebook-php-sdk-3.2.3/src/facebook.php');

const TITLE      = 'My amazing app';
const REDIRECT   = 'https://example.com/myapp/';

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

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

if (isset($_REQUEST['logout'])) {
        $client->destroySession();
        header('Location: ' . REDIRECT);
        exit(0);
}

if ($client->getUser()) {
        try {
                $me = $client->api('/me?fields=id,first_name,gender');
                $body = '<PRE>' . print_r($me, TRUE) . '</PRE>';
        } catch (FacebookApiException $ex) {
                error_log($ex);
                $body = '<PRE>' . htmlspecialchars($e->getMessage()) . '</PRE>';
        }
} else {
        $body = sprintf('<P><A HREF="%s">Login</A></P>', $client->getLoginUrl());
}

?>

<!DOCTYPE HTML>
<HTML>
<HEAD>
        <TITLE><?= TITLE ?></TITLE>
</HEAD>
<BODY>
        <?= $body ?>
        <P><A HREF="<?= REDIRECT ?>?logout">Logout</A></P>
</BODY>
</HTML>

するのを忘れないで -

  1. FacebookコンソールでWebクライアントIDとシークレットを取得する
  2. https://example.com/myapp/同じ場所で承認する
于 2016-05-07T10:58:53.913 に答える
-1

これは私のアプリの1つで大きな苦痛だったことを覚えています。最終的にはうまくいったようです:

jQuery(function() {
   /* ... */
   FB.logout();
   window.location = 'some url';
});

jQueryがなくてもほぼ同じであるはずです(ページの読み込み時にFB.logout()を実行するだけです)。AFAIRこれをPHPのサーバー側で機能させることができませんでした。それが役に立てば幸い :)。

于 2012-04-28T18:40:11.040 に答える