Soru Facebook Giriş: PHP SDK ile JavaScript nasıl birleştirilir?


Her ikisinden de örneklerin birleştirilmesi hakkında nasıl giderim?

https://github.com/facebook/php-sdk/blob/master/examples/example.php ve https://github.com/facebook/connect-js/blob/master/examples/jquery/login.html

Son hedef, jQuery'yi oturum açmak için kullanabiliriz ve bir şekilde aşağıdaki satır hala çalışırdı

$user = $facebook->getUser();

Şu anda dikkatimi çeken, JavaScript ile oturum açtığımda, PHP ile oturumu ayarlamadığı, dolayısıyla PHP tabanlı SDK ile uyumsuzluğunun (bu durumda $ kullanıcı hala boş olacaktı)

Ben büyük bir hayranı değilim <a href="$facebook->getLoginUrl()">Login with Facebook</a>, çünkü tarayıcının farklı bir sayfa (facebook girişi) yüklemesine ve ardından web uygulamasına yeniden yönlendirmesine neden olur. Kullanıcının oturum açması için bir açılır kutuyu yükleyebilir ve daha sonra web uygulamasına yeniden yönlendirirseniz, bu daha da idealdir. Bu nedenle, bu kullanıcı deneyimini uygulamak için nasıl gidebileceğime dair önerileriniz büyük ölçüde takdir edilecektir. Teşekkür ederim!


21
2018-05-27 03:44


Menşei


Aynı kesin sorunu yaşıyorum. Bunu çözebildin mi? - Daniel O'Connor
@Daniel Güncellenmiş cevabımı görün - Phil
En son api ile bir şey yapmanıza gerek yoktur. Sadece çerezlerin açık olduğundan emin olun, SDK çalışacaktır. - siniradam


Cevaplar:


Sadece Facebook giriş butonunu kullanıyorum - https://developers.facebook.com/docs/reference/plugins/login/

Kullanıcı bunu (daha önce yapmadıysa) giriş yaptıktan ve uygulamanıza (site) erişim izni verdikten sonra, PHP-SDK'nın Facebook oturumunu ve API'lerini kullanmasında hiçbir sorun yaşamaz.

Güncelleştirme

Bunu yeni sürüm 3.0 PHP SDK ile denedim ve kesinlikle değil Çalışma. Bunu bulundu geliştirici blogu

PHP SDK ile giriş yapmak için JavaScript SDK'sını kullanıyorsanız, JavaScript SDK yükseltmesini beklemek isteyeceksiniz (4 hafta içinde geliyor). PHP SDK'nın 3.0.0 sürümü, çerez biçiminin değişmesi nedeniyle mevcut JavaScript SDK'sı ile işbirliği yapmayacaktır.

Başka bir deyişle, JS SDK güncellenene kadar v2 PHP SDK kullanın.


12
2018-05-27 04:26



Aslında dün önerilerinizi işe almaya çalışmak için epey zaman harcadım, ama hayır oldu. PHP SDK'daki örnekte gösterildiği gibi değiştirdim pastebin.com/fy2SRLWM   Ve oturum açmış olmama rağmen (fb: oturum açma düğmesi oturum açtığımı gösterir), PHP oturumunu ayarlamaz. Uygulama ayarımda siteUrl şudur localhost yerel test için - Antony
@Antony Tamamen doğru. Görünüşe göre, PHP SDK'sı artık JavaScript SDK'sı kullanılarak ayarlanan küme erişimine sahip değil. Bunun üzerine, kullanarak getLogoutUrl() yöntem - Phil
Teşekkürler Phil. Blogda bu snippet'i okuduğumu açıklamak için bu sayfaya geri döndüm. Bunu anlamaya çalışan sekiz saat boyunca saçlarımı yırtıyordum! Oh iyi... - Daniel O'Connor
@Daniel Sorun, tüm örneklerin ana dalı klonlamanızı / indirmenizi sağlıyor. JS SDK'sı yakalanana kadar v3 dalını beta olarak etiketlemiş olmalılar. - Phil
Teşekkürler Phil! V2'ye düşürdüm ve şimdi çalışıyor! Yan notta, localhost'a karşı test nedeniyle v2'ye sahip olan biri varsa, bkz. github.com/facebook/php-sdk/issues/79 çözüm için. - Antony


Bu çalışmayı aldığınızdan emin değilsiniz. Mevcut JS API'sı, çerezi saklamak için bir yapılandırmaya sahiptir, böylece sunucu bunu okuyabilir:

FB.init({
    appId  : 'YOUR APP ID',
    cookie : true
});

Şimdi, PHP'de, oturumu JS'den kullanmak için aşağıdakileri yapabilirsiniz:

// Read the cookie created by the JS API
$cookie = preg_replace("/^\"|\"$/i", "", $_COOKIE['fbs_' . FB_APP_ID]);
parse_str($cookie, $data);

// Startup the Facebook object
$fb = new Facebook(array(
    'appId'  => FB_APP_ID,
    'secret' => FB_APP_SECRET
));

// Say we are using the token from the JS
$fb->setAccessToken($data['access_token']);

// It should work now
var_dump($fb->getUser());

Umarım yardımcı olur.


15
2017-07-18 02:09



Benim için çalışıyor, ama $ _COOKIE ['fbm_'. FB_APP_ID] Çok teşekkürler. - Idealmind
Artık tüm bu preg_replace öğelerini yapmaya gerek yok. getUser () kutudan çıkar çıkmaz - celwell
Buna ek olarak, çerezdeki alanın doğru olması gerekir. Bu, benim için, fb uygulama ayarlarının> Uygulama Alanlarının çıplak bir alan adı kullanmak için gerekli olduğu anlamına gelir: example.com www.example.com değil. Bu sadece benim birden fazla alt alanım olan (www, sales.example.com, vb.) Durumum için geçerli olabilir. - changokun


facebook'un bu problemi doğru zamanda düzeltememesi gibi bir şey (konuştukları gibi) https://developers.facebook.com/blog/post/503).

bu js sdk hakkında en yeni bilgiler https://developers.facebook.com/blog/post/525/


1
2017-08-08 11:52





Uzun saatler süren aramalardan sonra, PHP SDK'nın Facebook oturumunu almadığı sorunu çözdüm. Görünüşe göre, Javascript SDK oturumu doğru şekilde ayarlamıyor. Bunu senin için ekle auth.login EventListener:

FB.Event.subscribe('auth.login', function(response) {
    FB._oauth = false;
    FB.Cookie.setEnabled(true);
    FB.Auth.setSession(response.authResponse, response.status);
    FB._oauth = true;
    window.location.reload();
});

Ayrıca, App Domain'i çerez alanınızla eşleşecek şekilde ayarladığınızdan emin olun. Bu eşyaları tamir ettikten sonra sonunda işe yaradı.

Düzenle: Bu sabah her şey iyi çalışıyordu. Şimdi biraz daha test ettiğimde, Facebook'un isteklerinin zaman aşımına uğramadığından emin olmak için base_facebook.php dosyasını düzenlemek zorunda kaldım. Tahminim, yerel makinemde test yaptığım için bağlantının zamanında yapılabilmesi için yeterince hızlı olmamasıydı. Bu, bazen ve bazen işe yaramayacağı garip davranışları açıklar.

128 numaralı bağlantı noktasında $ CURL_OPTS dizisinde connecttimeout'u değiştirin:

public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 20,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
    CURLOPT_USERAGENT      => 'facebook-php-3.1',
);

1
2017-12-15 13:24





SDK'nın 4. sürümünde, JavaScript SDK'sı ile otomatik olarak çalışır. Sadece kullanman gerek FacebookJavaScriptLoginHelper:

$helper = new FacebookJavaScriptLoginHelper(); // Get access token from JS SDK
try {
    $session = $helper->getSession();
} catch(FacebookRequestException $e) {
    // When Facebook returns an error
    echo "Exception occured, code: " . $e->getCode();
    echo " with message: " . $e->getMessage();
} catch(\Exception $e) {
    // When validation fails or other local issues
    echo "Exception occured, code: " . $e->getCode();
    echo " with message: " . $e->getMessage();
}

// If logged in
if($session) {
    // Get user profile
    try {
        $user_profile = (new FacebookRequest(
            $session, 'GET', '/me'
        ))->execute()->getGraphObject(GraphUser::className());

        print_r($user_profile);

    } catch(FacebookRequestException $e) {

        echo "Exception occured, code: " . $e->getCode();
        echo " with message: " . $e->getMessage();
    }
}

Çerezlerle uğraşmanıza gerek yok!


0
2018-04-21 17:09