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!
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.
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.
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/
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',
);
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!