Facebook PHP SDK ve Codeigniter ile Facebook Authentication

Detaylarını ileride anlatacağım codeigniter ile geliştirmeyi sürdürdüğüm bir projeme bugün Facebook Authentication’u entegre ettim. Bu yazımda Facebook API’nin nasıl çalıştığından çok codeigniter entegrasyonunu anlatacağım.

Öncelikle Facebook’da yeni bir app oluşturmalısınız. App’i sadece login için kullanacaksanız yapılması gereken ayarlar pek fazla değil. Dikkat edilmesi gereken tek nokta Site URL’nin kurulumun yapılacağı sitenin URL’si ile aynı olması. Bunun dışında kısıtlama yok.

2. Adım codeigniter ile facebook php sdk’yı birleştirmek. Bunun için codeigniter’ın library klasörüne php sdk dosyaları ekleyeceğiz.

Facebook PHP SDK’nın orjinal dosyalarına https://github.com/facebook/facebook-php-sdk/tree/master/src adresinden ulaşabilirsiniz.

Facebooktan geri dönen verileri sessionda saklayacağımız için Codeigniter’da session kütüphanesini autoload’a ekliyoruz.


$autoload['libraries'] = array('session');

Facebook loginden sonra sitenize geri dönüşü get parametreleriyle yapacağı için config.php dosyasında get parametrelerine izin vermeniz gerekiyor.


$config['allow_get_array'] = TRUE;

Şimdi application/libraries/ dizini altına github’dan indirdiğiniz facebook.php, base_facebook.php ve fb_ca_chain_bundle.crt dosyalarını kopyalayın. Bu kütüphaneleri model içerisinde yükleyerek facebook objesini oluşturacağız.

Model


<?php
class Facebook_model extends CI_Model {
 
    public function __construct()
    {
        parent::__construct();
 
        $config = array(
                        'appId'  => '', //App Id'nizi yazmayi unutmayin!
                        'secret' => '', //App Secret'i yazmayi unutmayin!
                        'fileUpload' => true,
                        );
 
        $this->load->library('Facebook', $config);
        $user = $this->facebook->getUser();
//Giriş yapmış bir kullanıcı varsa bilgilerini alıyoruz.

        $profile = null;
        if($user)
        {
            try {
                //Giriş yapmış bir kullanıcı olduğundan emin oluyoruz.
                $profile = $this->facebook->api('/me?fields=id,name,link,email');
            } catch (FacebookApiException $e) {
                error_log($e);
                $user = null;
            }
        }
 
        $fb = array(
                        'me' => $profile,
                        'uid' => $user,
                        'loginUrl' => $this->facebook->getLoginUrl(
                            array(
                                'scope' => 'email,user_birthday,publish_stream', //APP İzinleri
                                'redirect_uri' => '' //Geri dönüş URL'si eğer boş bırakırsanız ilk adrese döner.
                            )
                        ),
                        'logoutUrl' => $this->facebook->getLogoutUrl(), //Çıkış URL'si
                    );
 
        $this->session->set_userdata('fb', $fb);
//Facebook verilerini session'a atıyoruz
    }
}

Controller


class Main extends CI_Controller {
 
    function __construct()
    {
        parent::__construct();
        $this->load->model('Facebook_model');
    }
 
    function index()
    {
        $fb = $this->session->userdata('fb'); //Sessiona atadigimiz facebook parametrelerini aliyoruz
        $data['fb'] = $fb;
        $this->load->view('home', $data)
    }

}

View


<body>
<div>
<?php if(!$fb_data['me']): ?>
<a href="<?=$fb['loginUrl'];">Facebook ile Giris Yapin</a>
//Eger giris yapilmadiysa giris butonu gosterilir
<?php else: ?>
<p>Merhaba, <?=$fb['me']['name'];?></p>
<a href="<?=$fb['logoutUrl'];">Çıkış Yap</a>
<?php endif; ?>
</div>
</body>

Eğer Curl ile ilgili SSL kaynaklı bir hata alırsanız base_facebook.php dosyasının 130lu satırlarında “CURLOPT_USERAGENT” bulunuyor. Bunun bir alt satırına,

CURLOPT_SSL_VERIFYPEER => false,

ekleyerek sorunu çözebilirsiniz.

One thought on “Facebook PHP SDK ve Codeigniter ile Facebook Authentication”

  1. Merhaba. Paylaşım için teşekkürler.

    Kodu çalıştırdığımda (domain altında) aşağıda ki hatayı alıyorum, nasıl düzeltebilirim:
    “Fatal error: Call to a member function getUser() on a non-object in /home/karepeyz/public_html/application/models/facebook_model.php on line 15”

Leave a Reply

Your email address will not be published. Required fields are marked *