2011-01-05 16 views
10

FB connect kullanan bir web uygulaması (PHP) yapıyorum. Ben facebook tarafından sağlanan PHP lib yardımıyla kullanıcı kayıt/imzalama. Ayrıca ben el ile tarayıcınızın çerez yöneticisine gidip FB oturumu saklayan çerez silerseniz, ancak bu koduFacebook erişim belirtecini saklayabilir ve daha sonra kullanabilir miyim?

 Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 
    Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;    
    $facebook = new Facebook(array(
     'appId' => $fb_key, 
     'secret' => $fb_secret, 
     'cookie' => true, // enable optional cookie support 
    )); 
    $session = $facebook->getSession(); 
    if ($session) 
    { 
     $facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));     
    } 

kullanarak, duvara gönderebilir, kod çalışmaz. Sahip olduğum tek şey, kullanıcının DB'de sakladığım FB ID'sidir. FB oturumları kaybolsa bile kullanıcının duvarına posta yollamanın bir yolu var mı? Kullanıcının FB erişim belirtecini DB'ye kaydetmek daha sonra mı yoksa erişim belirteci nispeten kısa ömürlü mi?

Uygulamamda meydana gelebilecek bir örnek durum: kullanıcı tıklamaları fb düğmesi, uygulamamı yetkilendirir, FB tarafından sağlanan verilere dayanarak otomatik olarak bir hesap oluşturduğum siteme yeniden yönlendirilir, ayrıca kullanıcının FB Kimliği'ni depolarım Böylece daha sonra bu kullanıcıyı imzalayabilirim. Şimdi siteye göz atıyor, biraz bilgi giriyor ve bu bilgi onun duvarına gönderiliyor. Kullanıcı tarayıcısı FB tarafından oluşturulan çerezi tuttuğu için her şey yolunda. Artık kullanıcı siteden ayrılıyor ve site yöneticisi ile irtibat kuruyor. Yönetici kendi tarayıcısını açar, yönetici arayüzüne gider ve bu kullanıcı adına bir şey gönderir. Şimdi, kullanıcının FB ID'sine sahip olmak ve kullanıcının izinleri iptal etmediğini varsayarak, bunu yine de duvarına gönderebilir miyim?

cevap

8

UPDATE: Bu yanıt çevrimdışı_access'in kullanımdan kaldırıldığından artık geçerli değil.

Offline_access iznini istemeniz gerekir. permissions dokümanı kontrol edin.

EDIT Güncelleştirme ve yorumlar - offline_access'in kaldırılmasıyla ilgili bazı bilgiler here bulunabilir.

+0

Teşekkürler, harika çalışıyor! – Eugene

+4

Bu kullanımdan kaldırılacak. 60 günlük access_token kullanmayı deneyin. – funerr

23

Facebook PHP SDK v3 (see on github) ile, bir kullanıcı çevrimdışı erişim belirteci istemek ve kullanmak oldukça kolaydır. İşte böyle yapıyorsun.

veya değil kullanıcı oturum olmadığını kontrol

İlk belirteç çevrimdışı erişin: o değilse

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$user = $facebook->getUser(); 

if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    $user = null; 
    } 
} 

, sen offline_access soran "Giriş Facebook ile" URL yaratacak izni:

if (!$user) { 
    $args['scope'] = 'offline_access'; 
    $loginUrl = $facebook->getLoginUrl($args); 
} 

Ve sonra şablonunda bağlantı görüntülemek:

<?php if (!$user): ?> 
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a> 
<?php endif ?> 

Sonra, kullanıcı giriş yaptığında çevrimdışı erişim simgesini alabilir ve saklayabilirsiniz. bunu elde etmek için, çağrı:

if ($user) { 
    $token = $facebook->getAccessToken(); 
    // store token 
} 

belirteç çevrimdışı erişim kullanın

kullanıcı oturum değilken çevrimdışı erişim belirtecini kullanmak için:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$facebook->setAccessToken("..."); 

Ve şimdi API çağrıları yapabilir Bu kullanıcı için:

$user_profile = $facebook->api('/me'); 

Yardım edin!

+2

Mükemmel cevap. Facebook dokümantasyonunu yazmalısın, çünkü zaten orada olandan daha iyi. –

+0

Teşekkürler Michael :) – Quentin

+0

3 gün boyunca aradığım çok harika bir çözüm. –

İlgili konular