• Hack kategorilerindeki birçok içerik Gizli içeriktir yani sadece cevap yazarakı erişebileceğiniz türden içeriklerdir, ancak yeni üyelerin hack kategorilerine cevap yazması engellenmiştir ! spam ve sömürüye karşı bir tedbirdir, forumumuza katkı sunarsanız rütbeniz kısa sürede yükselir ve tüm forumu engelsiz kullanabilirsiniz.

PHP ile "Facebook Connect" Entegrasyonu Nasıl Yapılır ? #2

Mr.Emre

RedMaster
Şimdi izin verilme durumunu yapalım. İzin verildiyse öncelikle kullanıcının Facebook IDsini alıp, veritabanımızda kayıtlı olup olmadığını kontrol edeceğiz.

fbin.php
PHP:
require_once("ayar.php");
require_once("facebook/facebook.php");

$facebook = new Facebook($fbayar);

if(isset($_GET['error'])){
     // İzin verilmedi, iptale tıklandı.
     header("Location: index.php");
     // Hiçbirşey yapmadık, kullanıcıyı sadece index.php sayfasına yönlendirdik.
}
else{
     // İzin verilme koşulu sağlandıysa
     $fbID = $facebook->getUser();

     $uyekontrol = mysql_query("SELECT * FROM uyeler WHERE fbID='$fbID'");

     if(mysql_num_rows($uyekontrol)==1){
          // Daha önce kayıt olmuş bir üye ise
          $_SESSION['fboturum']="tamam";
          $uyebilgi = $mysql_fetch_object($uyekontrol);
          $_SESSION['fboturumid'] = $uyebilgi->id;
     }
     else{
          // Daha önce kayıt olmuş bir üye değilse
     }
}
mysql_num_rows ile veritabanında dönen facebook fbID var mı yok mu kontrol ettik. Varsa fboyurum sessionunu "tamam" olarak belirledik. Aynı sorgudan mysql_fetch_object ile üye bilgilerinden id'yi çektik ve fboturumid sessionuna atadık.

Şimdi de dönen üyenin veritabanında olmaması durumuna bakalım.

fbin.php
JavaScript:
require_once("ayar.php");
require_once("facebook/facebook.php");

$facebook = new Facebook($fbayar);

if(isset($_GET['error'])){
     // İzin verilmedi, iptale tıklandı.
     header("Location: index.php");
     // Hiçbirşey yapmadık, kullanıcıyı sadece index.php sayfasına yönlendirdik.
}
else{
     // İzin verilme koşulu sağlandıysa
     $fbID = $facebook->getUser();

     $uyekontrol = mysql_query("SELECT * FROM uyeler WHERE fbID='$fbID'");

     if(mysql_num_rows($uyekontrol)==1){
          // Daha önce kayıt olmuş bir üye ise
          $_SESSION['fboturum']="tamam";
          $uyebilgi = $mysql_fetch_object($uyekontrol);
          $_SESSION['fboturumid'] = $uyebilgi->id;
          header("Location: index.php");
     }
     else{
          // Daha önce kayıt olmuş bir üye değilse
         
          // api metodundan üye bilgilerini çekelim
          $yeniuye = $facebook->api("/{$fbID}",'GET');

          // üye bilgileri $yeniuye dizisinde tutulacak.
         
          $adsoyad = $yeniuye['name'];
          $email = $yeniuye['email'];

          mysql_query("INSERT INTO uyeler (adsoyad,fbID) VALUES ('$adsoyad','$email')");

          $uyeidcek = mysql_query("SELECT * FROM uyeler WHERE fbID='$fbID'");
          $yeniuyeid = mysql_fetch_object($uyeidcek);

          $_SESSION['fboturum']="tamam";
          $_SESSION['fboturumid'] = $yeniuyeid->id;
          header("Location: index.php");
     }
}
Üyenin daha önce veritabanımızda olmaması durumunu da böylece bitirdik. Üye bilgileri api metoduyla çekilir. Ayrıca paylaşım yapma gibi bütün işlemler de api metoduyla halledilir.

getUser ile kişinin facebook ID'sini aldık yine. Sonra api metodunda $yeniuye = $facebook->api("/{$fbID}",'GET'); şeklinde yerine yazdık. üyenin tüm bilgileri $yeniuye değişkenine atandı. Bu bir dizi olarak atanır. Örneğin ben uygulamanıza izin veren bir kullanıcıysam, benim bilgilerime $facebook->getUser('/erginkeles','GET'); şeklinde ulaşılacaktır. Ama izin vermediysem hata alırsınız. Veri alma gibi işlemler GET metodu ile, paylaşım yapma gibi işlemlerse POST ile yapılıyor.

Ardından veritabanına yeni bir satır ekledik. id'si otomatik olarak belirlendi. fbID sütünuna getUser ile aldığımız facebook id'sini, adsoyad sütununa ise api metoduyla çektiğimiz ad soyad bilgisini girdik.

Sonra tekrar bir sorgu oluşturduk ve bu yeni üyenin oluşturulan yeni id'sini alıyoruz. Hemen ardından da, fboturum ve fboturumid sessionlarını atayarak, üyenin giriş işlemini de yapmış oldu. Giriş işleminden sonra da üyeyi index.php'ye yönlendirmiş olduk. Artık üye, session girişi yapıldığı için giriş urlsini değil çıkış urlsini görebiliyor olacak.

Çıkış işlemi
Giriş yaptıktan sonra siteniz üzerinde çeşitli işlemleri, sıradan bir üyelik sistemi kullanıyor gibi yapabilirsiniz. Malum, üye girişi yaptık ve sessionlarımız mevcut.

Şimdi de fbout.php dosyamızı hazırlayalım. getLogoutUrl metodu ile bir çıkış urlsi almıştık facebook'tan. Kullanıcı ona tıkladığı zaman yine facebook'a yönlenir ve çıkış gerçekleşir. Ardından next kısmında belirlediğimiz adrese geri yönlenir. Burada da sitemiz için gerekli session öldürmelerini yapacağız.

fbout.php
PHP:
$facebook = new Facebook($fbayar);

unset($_SESSION['fboturum']);
unset($_SESSION['fboturumid']);

$facebook->destroySession();

header("Location: index.php");
fbout.php dosyasında yaptığımız işlemler şu şekilde.
  1. fboturum ve fboturumid sessionlarını boşalttık.
  2. $facebook->destroySession() metodu ile facebook sessionlarını sonlandırdık.

İşin eğlenceli kısmı

Facebook Connect ile giriş yaptık, çıkış yaptık. Eeee?

Facebook Connect'i sadece kullanıcı giriş çıkış işlemleri için kullanabilirsiniz. Bunun yanında daha birçok işlem için Facebook connect ve Facebook apilerini kullanabiliriz.

Apileri kullanırken önemli olan nokta izinlerin alınması. İzinleri, giriş urlsi alırken, scope kısmında talep ettiğimizi belirtmiştik. Hatırlatayım:
PHP:
$girisurl = $facebook->getLoginUrl(array(
     'scope' => 'publish_stream,email',
     'redirect_uri' => 'http://localhost/FCDeneme/fbin.php'
));
Şimdi de hangi bilgi ve işlem için hangi iznin alınması gerekiyor onlara bakacağız.

Hiçbir izin alınmadıysa
Scope kısmı boş bırakıldıysa, kullanıcının herkese açık bilgileri ve arkadaş listesi döner. Dönen bilgilerden bazıları şunlar:
PHP:
$girisurl = $facebook->getLoginUrl(array(
     'scope' => '',
     'redirect_uri' => 'http://localhost/FCDeneme/fbin.php'
));
  • id : Facebook ID
  • name : Ad Soyad beraber
  • first_name : Sadece ad
  • last_name : Sadece soyad
  • link : Kullanıcı adı ile beraber facebook linki. Örnek; http://facebook.com/imhatimi
  • username : Sadece kullanıcı adı
  • gender : Cinsiyet
  • locale : Bölge, dil. Örnek; tr_TR
  • age_range :
  • timezone : saat dilimi (mesela türkiye için 2 olarak görünür. yani est+2)
  • Diğer herkese açık veriler***

*** Mesela kullanıcı okul bilgilerini, iş bilgilerini herkese açık olarak güncellemişse, burada bu bilgiler de gelir.

Bu bilgileri almak için birkaç örnek verelim.
PHP:
$bilgiler = $facebook->api("/{fbID}",'GET');

$ad = $bilgiler['first_name'];
$soyad = $bilgiler['last_name'];
$kullaniciadi = $bilgiler['username'];
$fbID = $bilgiler['id'];
Gördüğünüz gibi, veriler dizi olarak geri döner. Dizinin ilgili elemanını alabilirsiniz.

Hiçbir izin alınmadığında bir de arkadaş listesi döndürebilirsiniz. Arkadaşların sadece ID numaraları ve Ad Soyad bilgileri döner.
PHP:
$arkadaslar = $facebook->api("/{fbID}/friends",'GET');

print_r($arkadaslar);
şeklinde arkadaş listesini görebilirsiniz.
Sıfır siteye entegrasyon kolay. Peki hazır sistemlere, hali hazırda kullandığımız sistemlere Facebook Connect'i nasıl entegre edeceğim?
Facebook Connect entegrasyonunu anlattıktan sonra en çok soru aldığım konu buydu. Bütün internet sitesini ve sistemi Facebook Connect etrafında kurmak kolay. Üyelik sistemini Facebook Connect kullanarak sıfırdan oluşturmak kolay. Peki ya hali hazırda kullandığınız sistemde entegrasyon nasıl olacak?

Daha da açmam gerekirse şundan bahsediyorum. Diyelim ki başkasının yazdığı bir sistem kullanıyorsunuz. Örneğin wordpress. Evet wordpress için hazır yazılmış Facebook Connect eklentileri var. Ama olmadığını düşünün. Facebook Connect'i wordpress için uygulamak istediniz. Neler yapmalı nasıl bir yol haritası izlemelisiniz?

Hazır bir sisteme Facebook Connect entegre etmeden önce benim size bir yol haritam olacak.

Öncelikle Facebook Connect'ten sadece kendi üyeleriniz faydalansın. İlk aşamada dışarıdan sadece Facebook Connect ile üyelik kabul etmeyin. Bunu şunun için yapın. Üyelerinizin var olduğu veritabanı tablonuzda, fbID isimli bir sütun oluşturun. Böylece her üyenizin bir fbID sütunu olacak. Üyeleriniz var olan üye girişlerini yapsınlar. "Bilgilerim" gibi üyelerinizin bilgilerini güncellediği bir sayfanız mutlaka vardır. Bu sayfaya Facebook ile bağlantı kur gibi bir seçenek ekleyin. Bu sayede üyeleriniz Facebook Connect ile sizin web sitenizdeki hesaplarını birleştirmiş olsunlar. Bu sayede hem sizin sitenizde hesap sahibi olup, hem de yeniden Facebook Connect ile yeni bir hesap oluşturmuş olmasınlar.

Üyelerinizi bunu yapmaları konusunda teşvik edin. Site hesapları ile facebook hesaplarını birleştirsinler. Birleştiriliince, fbID sütununa üyenin facebook IDsini yazdırın. Şimdi sitenize daha önce üye olan kişiler için 2 giriş yöntemi oldu. 1.si normal kullanıcı adı ve parola ile giriş. Bunu her zamanki gibi yapacaklar. Bir de facebook ile giriş. Facebook hesapları ile normal hesaplarını birleştirmiş olan üyeleriniz tek tıkla giriş yapabilsinler.

Not olarak düşeyim, bilgilerim sayfasından facebook ile site hesaplarını birleştirecek üyeler linkle tıklayacak. Facebooka gidip sitenize izin verecek ve fbin.php dosyanıza dönecekler. Bu dosya facebooktan gelen ID'yi üyenizin fbID sütünuna yazdıracak.

Belli bir süreden sonra Facebook connect'i, tüm ziyaretçilerinize açabilirsiniz. Bu sefer fbin.php dosyanız veritabanına ekleme işlemini de yapmak zorunda.

Ben makaledeki örnekte, giriş işlemini fboturum session'u ile yaptım. Yani $_SESSION['fboturum'] tanımlandıysa, ve id atandıysa, üye girişi yapılmış farzettik. Wordpress veya vbulletin gibi sistemlerde tabi ki bu yeterli olmayacaktır. Hangi sessionlar açılıyor, hangi cookie'ler kullanılıyor bunu saptamalı ve sistemin kullanıcıyı giriş yapmış olarak görebilmesi için gerekli işlemleri yaptırmalısınız. Siz belli bir session oluşturabilir ve açabilirsiniz ama wordpress, vbulletin vs bunu tanımalı ki giriş yapılabilsin.
 

LQM33

🐧Linux 🐧
Mis gibi konu da 1 mesaj bile yok !
Olur mu insanlar hesap çalmayı öğrenecek...
Eline sağlık müthiş anlatılıp değeri bilinmeyen konulardan.
 
Üst Alt