9

dan giriş korumak ve mevcut JavaScript SDK burada önerilen olarak: https://developers.facebook.com/docs/guides/web/nasıl facebook uygulamasından kullanıcının oturumunu ama PHP SDK (v.3.1.1) denemiş facebook

şimdi çalışırken oturumu kapatıyorum FB.logout() (js için) ve $ facebook-> getLogoutUrl();

hem açıkça devlet belgelerinde olarak, bu yöntemler uygulamanın dışına yanı sıra facebook oturumu kullanıcıyı log .

Ama sadece facebook uygulama (test yeri) dışına kullanıcıyı oturum açmanız gerekir.

Ben facebook yönünü göz ardı benim test siteden kullanıcının oturumunu çalıştılar. Ancak bu durumda, kullanıcı tekrar giriş düğmesine bastığında, oturum açma akışı (facebook kimlik doğrulama ve yönlendirme) gerçekleşmez.

Ben de denedim: oturum açma sayfasına yönlendirme yaparken

$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']);  

Ancak, $ facebook-> GetUser() hala kullanıcıyı alır (önceki çözülmemiş sorulara önerdiği gibi).

not: dokümantasyon Örneğin gereğince, benim test sitesi, ve kullanıcının girişi için php sdk kullanıyorum js sdk, işlemek ve facebook giriş düğmesine kolaylaştırmak için. Ek

i kullanmak kimlik doğrulama temelde

hangi belgelerin öneriyor:

<?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

Bir kullanıcı uygulama için doğrulanmış VE 'GetUser Facebook'a Giriş yaptıktan ise()' daima FBID dönecektir. çerez silme işleri, ancak sdk getme 'getUser' çağırmak yeni bir access_token wenn olsun, bu yüzden bunu yapmak istiyorsun? ne siz (uygulama) ne de facebook kullanıcısı bundan bir şey kazanmaz. – Rufinus

+0

Sadece o kullanıcı için sahip olduğunuz oturum çerezini silme hakkında ne dersiniz? Çerezinizi yalnızca sildiyseniz, kullanıcı hala uygulamanıza değil de facebook'a giriş yapar. Kullanıcı giriş düğmesine bastığında, onun için yeni bir oturum oluşturursunuz. –

+0

@NitzanTomer Test sitesinin oturumunu silmeyi denedim, ancak belirttiğim gibi, bu durumda js sdk giriş düğmesi artık beklendiği gibi çalışmıyor. – Alias

cevap

5

kodunuzu alarak ve sadece biraz değiştirerek:

<?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> 

Sadece kaydedilmesini eklendi Kullanıcı verilerini oturuma. Şimdi, eğer bu yöntemi kullanırsanız, kullanıcı sayfanıza girdiğinde, zaten bir oturumu olup olmadığını kontrol etmelisiniz, eğer öyleyse her şey iyi değilse onu doğrulamaya gerek yoktur. Bir sonraki sefer ziyaretleri,

session_start(); 
session_destroy(); 

kullanıcı için gereken tüm kaydedilmiş verileri kaldırmak olmalıdır: Eğer değil facebook dışarıda, bu uygulamadan çıkış kullanıcıyı oturum açmak istediğinizde

, sadece o oturumu yok sayfanızda onunla taze başlayabilirsiniz.

Ben php programcısı değilim ve burada kullanılan php hayatım (çok) sınırlı bilgi ve ne Etrafa buldum değil.

+0

evet, bu yaklaşımı denedim. ama son cevabımda belirttiğim gibi, şimdi facebook sdk'in neden siteyi tamamen siteden ve facebooktan tamamen çıkardığını takdir ettim. Örneğin, bir kullanıcı bir tarayıcı açar ve siteye girer, fb girişini kullanır, siteye giriş yapar ve aynı eylemde facebook'ta da oturum açar. Sadece sitenin oturumunu yok edersem, kullanıcı hala önceki eylem nedeniyle Facebook'a giriş yapmış, ancak bunu istemeyebilir. – Alias

+0

İstediğim şey: 1.) kullanıcı (fb'ye veya siteye giriş yapmamış) fb ile siteye giriş yapar, çıkış yapar ve fb oturumu da yok edilir. 2.) Kullanıcı (siteye değil, fb'ye giriş yapmış), siteye fb ile giriş yapar, siteden çıkış yapar, ancak fb oturumu devam eder. – Alias

+0

Tabii ki. Facebook, kullanıcıları platformlarından dışarı çıkarmanın bir yolunu sunar, ancak bu yaklaşımı almak ya da bunun yerine sadece sitenizden kullanıcıyı oturum açmak size ve uygulamanıza bağlıdır. Bir kullanıcıyı sadece uygulamanızdan nasıl çıkaracağınızı sordu ve facebook'tan değil, size yardımcı olmaya çalıştığım şeyden. Bir seçim yapmak istemiyorsanız iki farklı tuş çeşidine sahip olabilirsiniz: "site ve fb oturumunu kapatma" ve "site dışı oturum kapatma" ve kullanıcının karar vermesine izin verin. –

İlgili konular