9

से लॉगिन बनाए रखने मैं PHP एसडीके (v.3.1.1) की कोशिश की है, और वर्तमान जावास्क्रिप्ट एसडीके यहाँ सुझाव के रूप में: https://developers.facebook.com/docs/guides/web/कैसे फेसबुक आवेदन से उपयोगकर्ता लॉग आउट करने के लिए, लेकिन फेसबुक

अब जब की कोशिश कर रहा लॉग आउट मैंने FB.logout() (जेएस के लिए) और $ facebook-> getLogoutUrl() दोनों की कोशिश की है;

दोनों स्पष्ट रूप से राज्य के लिए प्रलेखन के रूप में, इन तरीकों आवेदन से बाहर के साथ ही उनके फेसबुक सत्र उपयोगकर्ता लॉग ऑन ।

लेकिन मुझे केवल फेसबुक एप्लिकेशन (परीक्षण साइट) से उपयोगकर्ता को लॉग इन करने की आवश्यकता है।

मैं उपयोगकर्ता अपने परीक्षण साइट से लॉग आउट की कोशिश की है, फेसबुक पहलू की अनदेखी। लेकिन इस मामले में, जब उपयोगकर्ता फिर से लॉगिन बटन पर क्लिक करता है, लॉगिन प्रवाह (फेसबुक प्रमाणीकरण और रीडायरेक्ट) नहीं होता है।

मैं भी करने की कोशिश की: (जैसा कि पिछले अनसुलझे सवालों ने सुझाव दिया)

$facebook->destroySession(); 

unset($_SESSION['fb_' . sfConfig::get('app_fb_config_id') . '_code']); 
unset($_SESSION['fb_' . sfConfig::get('app_fb_config_id') . '_access_token']); 
unset($_SESSION['fb_' . sfConfig::get('app_fb_config_id') . '_user_id']);  

तथापि, जब प्रवेश पृष्ठ पर रीडायरेक्ट $ फेसबुक> getUser() अभी भी उपयोगकर्ता प्राप्त करता है।

नोट: दस्तावेज़ीकरण उदाहरण के अनुसार, मैं फेसबुक लॉग इन बटन को प्रस्तुत करने और सुविधा प्रदान करने के लिए उपयोगकर्ता को अपनी टेस्ट साइट, और जेएस एसडीके में लॉगिन करने के लिए php sdk का उपयोग कर रहा हूं।

अतिरिक्त:

प्रमाणीकरण मैं का उपयोग मूल रूप से है क्या प्रलेखन पता चलता है:

<?php 

define('YOUR_APP_ID', 'YOUR APP ID'); 

//uses the PHP SDK. Download from https://github.com/facebook/php-sdk 
require 'facebook.php'; 

$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => 'YOUR APP SECRET', 
)); 

$userId = $facebook->getUser(); 

?> 

<html> 
    <body> 
    <?php if ($userId) { 
     $userInfo = $facebook->api('/' + $userId); ?> 
     Welcome <?= $userInfo['name'] ?> 
    <?php } else { ?> 
    <div id="fb-root"></div> 
    <fb:login-button></fb:login-button> 
    <?php } ?> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : '<?= YOUR_APP_ID ?>', 
      status  : true, 
      cookie  : true, 
      xfbml  : true, 
      oauth  : true, 
     }); 

     FB.Event.subscribe('auth.login', function(response) { 
      window.location.reload(); 
     }); 
     }; 

     (function(d){ 
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     d.getElementsByTagName('head')[0].appendChild(js); 
     }(document)); 
    </script> 
    </body> 
</html> 
+0

यदि कोई उपयोगकर्ता आपके ऐप को प्रमाणित करता है और फेसबुक 'getUser()' में लॉग इन करता है तो हमेशा एफबीआईडी ​​वापस कर देगा। कुकी कामों को हटाने, लेकिन एसडीके को 'getUser' का आह्वान करने के लिए एक नया access_token wenn मिलता है, सवाल यह है कि आप ऐसा क्यों करना चाहते हैं? न तो आप (ऐप) और न ही फेसबुक उपयोगकर्ता इससे कुछ हासिल करते हैं। – Rufinus

+0

उस उपयोगकर्ता के लिए आपके पास सत्र कुकी को हटाने के बारे में कैसे है? यदि आप केवल अपनी कुकी हटाते हैं तो उपयोगकर्ता अभी भी फेसबुक पर लॉग ऑन रहेगा, लेकिन आपके ऐप पर नहीं। अगली बार जब उपयोगकर्ता लॉगिन बटन पर क्लिक करता है तो आप उसके लिए एक नया सत्र बनाते हैं। –

+0

@ निट्टन टॉमर मैंने परीक्षण साइट के सत्र को हटाने की कोशिश की है, लेकिन जैसा कि मैंने कहा है, इस मामले में, जेएस एसडीके का लॉगिन बटन अब अपेक्षित काम नहीं करता है। – Alias

उत्तर

5

अपने कोड ले रहा है, और सिर्फ एक बिट को संशोधित:

<?php 
    define('YOUR_APP_ID', 'YOUR APP ID'); 

    //uses the PHP SDK. Download from https://github.com/facebook/php-sdk 
    require 'facebook.php'; 

    $facebook = new Facebook(array(
     'appId' => YOUR_APP_ID, 
     'secret' => 'YOUR APP SECRET', 
    )); 

    session_start(); 

    $userId = $facebook->getUser(); 
    if ($userId && !isset($_SESSION['fbdata'])) { 
     $_SESSION['fbdata'] = array("userid" => $userId); 
    } 
?> 

<html> 
    <body> 
    <?php if ($userId) { 
     $userInfo = $facebook->api('/' + $userId); ?> 
     Welcome <?= $userInfo['name'] ?> 
    <?php } else { ?> 
     <div id="fb-root"></div> 
     <fb:login-button></fb:login-button> 
    <?php } ?> 
     <script type="text/javascript"> 
      window.fbAsyncInit = function() { 
       FB.init({ 
        appId  : '<?= YOUR_APP_ID ?>', 
        status  : true, 
        cookie  : true, 
        xfbml  : true, 
        oauth  : true, 
       }); 

       FB.Event.subscribe('auth.login', function(response) { 
        window.location.reload(); 
       }); 
      }; 

      (function(d){ 
       var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
       js = d.createElement('script'); js.id = id; js.async = true; 
       js.src = "//connect.facebook.net/en_US/all.js"; 
       d.getElementsByTagName('head')[0].appendChild(js); 
      }(document)); 
     </script> 
    </body> 
</html> 

मैं बस की बचत जोड़ा सत्र में उपयोगकर्ता डेटा। अब, यदि आप इस विधि का उपयोग करते हैं, तो जब उपयोगकर्ता आपके पृष्ठ में आता है तो आपको यह जांचना चाहिए कि उसके पास पहले से सत्र है या नहीं, यदि ऐसा है तो उसे प्रमाणित करने की कोई आवश्यकता नहीं है।

आप अपने अनुप्रयोग से बाहर उपयोगकर्ता लॉग इन करने की नहीं, बल्कि फेसबुक से बाहर चाहते हैं, तो सिर्फ इतना है कि सत्र को नष्ट:

session_start(); 
session_destroy(); 

बस इतना ही सहेजे गए डेटा आप उपयोगकर्ता के लिए को निकालना चाहिए, अगली बार जब वह दौरा आपका पेज आप उसके साथ ताजा शुरू कर सकते हैं।

मैं एक php प्रोग्रामर नहीं हूं, और यहां उपयोग किए गए सभी PHP मेरे (बहुत) सीमित ज्ञान और जो मैंने पाया है, से है।

+0

हां, मैंने इस दृष्टिकोण को आजमाया है। लेकिन जैसा कि मैंने आपको अपनी आखिरी प्रतिक्रिया में बताया है, मैंने अभी सराहना की है कि क्यों फेसबुक एसडीके उपयोगकर्ता को पूरी तरह से साइट और फेसबुक से लॉग आउट करता है। उदाहरण के लिए, उपयोगकर्ता एक ब्राउज़र पॉप अप करता है और एफबी लॉगिन का उपयोग करके साइट पर जाता है, वह साइट पर लॉग इन करता है, और उसी क्रिया में वह फेसबुक में भी लॉग इन होता है। अगर मैं साइट के सत्र को नष्ट करने के लिए था, तो पिछली कार्रवाई के कारण उपयोगकर्ता अभी भी फेसबुक में लॉग इन है, लेकिन वह इसे नहीं चाहेगा। – Alias

+0

जो मैं चाहता था वह है: 1.) उपयोगकर्ता (एफबी या साइट में लॉग इन नहीं है) एफबी लॉगिन के माध्यम से साइट पर लॉग इन करता है, लॉग आउट और एफबी सत्र भी नष्ट हो जाता है। 2.) उपयोगकर्ता (एफबी में लॉग इन, साइट पर नहीं), एफबी लॉगिन के माध्यम से साइट पर लॉग ऑन करता है, साइट से लॉग आउट करता है लेकिन एफबी सत्र बनाए रखा जाता है। बेशक – Alias

+0

। फेसबुक आपको उपयोगकर्ताओं को अपने प्लेटफॉर्म से लॉग आउट करने का तरीका देता है, लेकिन यदि उस दृष्टिकोण को लेना है या उपयोगकर्ता को लॉग इन करना है तो बस अपनी साइट से आप और आपके आवेदन पर निर्भर है। आपने पूछा कि उपयोगकर्ता को केवल अपने एप्लिकेशन से लॉग आउट करना है, न कि फेसबुक से, मैं यही आपकी मदद करने की कोशिश कर रहा था। यदि आप कोई विकल्प नहीं चुनना चाहते हैं तो आपके पास दो अलग-अलग प्रकार के बटन हो सकते हैं: "साइट से बाहर लॉग इन करें और एफबी" और "साइट से लॉग आउट करें" और उपयोगकर्ता को निर्णय लेने दें। –