Facebook yetkilendirme sorunu

2 Cevap php

Ben bir facebook uygulaması üzerinde çalışıyorum ve bunların yetki sistemin nasıl çalıştığı hakkında ben sadece anlayamıyorum şey var.

Bizim temel kurulum bu

tuval URL = domain.com / facebook

Bu domain.com / facebook / app Flash Uygulama kadar hizmet eden bir HTML sayfası olduğu için işaret eden bir FBML Iframe elemanı ile basit bir sayfa olduğunu.

Flash Uygulama bizim uygulama sunucusundan ek veri istekleri - bu bazı istekleri (örneğin arkadaşı kimliklerinin listesi olarak) Facebook'a veri isteyin.

Bu bir Facebook örneği (kendi PHP kütüphanesi) yaratır ve onların API gerekli çağrıyı yapar ve veriyi döndüren bir PHP sayfası - Yani Flash daha sonra / kaynaklar / facebook / arkadaş domain.com için bir istekte bulunur.

Ancak (flaş) bu URL'ye isteği doğrulamak değil, böylece daha sonra kendisi iki parametre ile benim tuval URL geri yönlendirir zaman zaman onların giriş için yönlendirilir - auth_token ve {[(1)] }. Yani isteği geçerlidir, ancak yönlendirme flaş aramayı keser.

(Kendileri topuz facebook API çağrıları zaman)-olsun gitmek facebook-vaildated olmak Yani, ben bu diğer API çağrıları yapmak için nasıl anlamaya çalışıyorum.

2 Cevap

Tamam, ben bunu anladım.

Olarak çıkıyor, Flaş zaten yönlendirmeleri takip - Yapmam gereken tüm auth_token varlığı tarafından belirtildiği yetki isteği (oradayken (tuval URL'den) algılar ve {[(1)] }) ve ben bir sonraki URL (temelde, özgün isteği üzerine auth_token ileri) yönlendirildi bir GET parametresi olarak include auth_token.

Yani, yukarıda söylediklerini aksine, yönlendirme flaş çağrıyı kırmak değil mi - bu sadece geçerli bir istek olmak için yeterli veri yoktu.

Yerine "require_login ()" satır aşağıdaki kodu koyarak çözün

if (isset($_GET['auth_token'])) {
 $sess_data=$facebook->api_client->call_method('auth.getSession',array('auth_token'=>$_GET['auth_token']));
 $facebook->set_user($sess_data['uid'],$sess_data['session_key'],$sess_data['expires']);
 $user=$sess_data['uid'];
}
if (!$sess_data) {
 $user=$facebook->require_login();
}