2012-04-28 11 views
6

मैं इस समस्या के समाधान के लिए घंटों की खोज कर रहा हूं लेकिन मेरे लिए काम करने वाला कोई नहीं ढूंढ सकता। जब मैं अपनी साइट पर "लॉगआउट" पर क्लिक करता हूं तो उपयोगकर्ता की जानकारी अभी भी दिखाई दे रही है और लॉगआउट बटन अभी भी प्रदर्शित होता है। यहाँ कोड है:फेसबुक PHP एसडीके - ठीक से लॉगआउट नहीं करेगा

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 कहां से प्राप्त किया गया है या कहां परिभाषित किया गया है?

यह एक आम मुद्दा प्रतीत होता है लेकिन मैं इसे समझ नहीं सकता। मैं वास्तव में कुछ मदद की सराहना करता हूं।

उत्तर

20

यह पीएचपी SDK के साथ करने से वास्तव में है आसान, प्रलेखन बस वास्तव में भयानक है। आपको फेसबुक पर रीडायरेक्ट करने की आवश्यकता नहीं है। आपको बस उस सत्र को साफ़ करना होगा जो फेसबुक क्लास सेट करता है, इसके लिए फेसबुक बेस क्लास में नष्ट सत्र() नामक एक फ़ंक्शन है। यहां मैं इसे प्राप्त करने पर कर रहा हूं।

require_once('libs/facebook.php'); 

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

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

$ facebook-> getLogoutUrl() उपयोगकर्ता को फेसबुक से बाहर लॉग करता है।

+0

धन्यवाद! यह स्वीकार्य उत्तर होना चाहिए। – celwell

+0

धन्यवाद! मुझे नहीं पता था कि यह फेसबुक से मुझे लॉग आउट कर रहा था जब तक आप इसे इंगित नहीं करते। – Gavin

-1

मुझे याद है कि यह मेरे ऐप्स में से एक में एक बड़ा दर्द था। ऐसा लगता है कि अंत में क्या काम करने के लिए लग रहा था था:

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

मैं jQuery के बिना एक ही के बारे में होना चाहिए (बस पृष्ठ लोड पर FB.logout() चलाने)। AFAIR मैं इसे PHP में सर्वर-साइड पर काम करने के लिए नहीं मिला। आशा करता हूँ की ये काम करेगा :)।

+0

तो क्या आप सुझाव दे रहे हैं कि मैं jQuery का उपयोग करता हूं या बस 'FB.logout () '? जहां मुझे अपने कोड में abouts रखना चाहिए? – garethdn

+0

आपको क्लाइंट साइड पर किसी भी 'पहले से ही हैंडलर' में 'FB.logout' चलाया जाना चाहिए। (jQuery सिर्फ 'मैं पहले से ही हैंडलर सेट करने के लिए उपयोग करता हूं)। – wroniasty

+0

यह PHP सत्र को साफ़ नहीं करेगा .. –

3

बाहरी लॉगआउट समस्या निर्दिष्ट करके आप इस समस्या को हल कर सकते हैं। आप विस्तृत जानकारी के लिए here

पर एक नज़र डाल सकते हैं। यह इस समस्या के लिए एक अच्छा ट्यूटोरियल है।

आशा इस

2

आपके सवाल का सीधे जवाब देने के लिए मदद करता है

... मैं नहीं जानता कि जहां लॉगआउट से मिल रहा है या जहां यह परिभाषित किया गया है?

जब आप अपने लॉगआउट यूआरएल बनाने के लिए, अतिरिक्त पैरामीटर जोड़ें 'लॉगआउट'

$logoutUrl = $facebook->getLogoutUrl(array(
    'next'=>'http://yourdomain.com/facebook-test-search.php?logout=yes' 
)); 
तो अपनी स्क्रिप्ट में

, आप स्पष्ट सत्र और कुकी जब isset($_GET['logout'])

2

यहाँ कैसे मैं नवीनतम पीएचपी-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> 

लॉगआउट।

$facebook->destroySession(); 

$facebook->getLogoutUrl(); 

बनाता उपयोगकर्ता फेसबुक से लॉग आउट हो आपके एप्लिकेशन की नहीं: 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> 
1

मैं उपयोग करते हुए मेरे app से उपयोगकर्ता लॉगआउट करते सक्षम था।

0

उस तरह की किसी तरह की परेशानी थी। भी

$facebook->destroySession(); 

ठीक से काम नहीं किया जब तक मैं पूरी तरह से हटा

$facebook->getLogoutUrl(); 

कॉल। getLogOutUrl() ने कुछ पैरामीटर जोड़े जो बाद में मेरे .htaccess के साथ विवादित हुए और * "mod_fcgid: stderr: CSRF स्थिति टोकन एक प्रदान की गई" * त्रुटि से मेल नहीं खाता है।

0

क्योंकि मेरे पास अभी भी 2016 में मेरे सेंटोस 6.7 सर्वर पर PHP 5.3 है और PHP संस्करण को अपग्रेड करने की परेशानी नहीं लेना चाहता - मैं अभी भी facebook/facebook-php-sdk-v4 लाइब्रेरी के बजाय पुराने facebookarchive/facebook-php-sdk का उपयोग करता हूं।

और यहाँ है कैसे मैं अपने अनुप्रयोग में लॉगआउट संभाल:

<?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 console
  2. पर गुप्त में https://example.com/myapp/ अधिकृत करें एक ही स्थान
संबंधित मुद्दे