
Facebook Developer bölümünde geliştiriciler için API ve bir çok sosyal eklenti sunuyor. Bu yazıda bir internet sitesinin üyelik sistemine Facebook üzerinden nasıl giriş yapılabileceğini anlatmaya çalışacağım.
İnternette bu konuda bir çok kaynak bulmanız mümkün. Bizim yapacağımız uygulamanın farkı ise mevcut makalelerin aksine Javascript ve Facebook PHP SDK kullanmadan sadece PHP kullanarak kullanıcıları mevcut üyelik sistemimize entegre etme mantığını görmek.
Uygulamamız 2 php dosyasından oluşuyor. Üzerinde çok fazla işlem yapmadığımız index.php ve Facebook bağlantısını gerçekleştiren connect.php.
index.php
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="tr" lang="tr">
<head>
<title>Facebook PHP</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
<body>
<?php if (isset($_SESSION['me'])): ?>
Facebook ile bağlanmışsınız.
<pre><?php var_dump($_SESSION['me']); ?></pre>
<?php else: ?>
<a href="connect.php">Facebook ile bağlanmak için tıklayınız.</a>
<?php endif; ?>
</body>
</html>
Yukarıda da söylediğimiz gibi, bu dosyamızda çok fazla işlem yok. Anlamanızda yardımcı olması amacıyla ekledim. me anahtarlı session varsa içeriğini ekrana basıyor, yoksa kullanıcının giriş yapmasını sağlamak amacıyla connect.php dosyasına giden bir bağlantı gösteriyor.
Asıl işlemi yapan connect.php'de 3 adımda kullanıcıya giriş yaptırıp verilerini alarak index.php'ye geri göndereceğiz. Öncelikle Facebook uygulaması oluşturmamışsak Facebook Developer sayfasından bir uygulama oluşturduktan sonra Application ID ve Secret Key değerlerini alıyoruz.
connect.php
session_start();
//Facebook App ID ve App Secret
$app_id = '';
$secret = '';
$base_url = 'http://www.navruz.net/ornekler/facebook/';
Verileri geçici olarak sessionda tutacağımız için önce yeni bir session başlatıyoruz. Daha sonra App ID ve Secret Key değerlerini birer değişkene atıyoruz. Ayrıca tekrar tekrar yazmamak için site adresimizi $base_url değişkenini oluşturuyoruz.
$code = isset($_GET['code']) ? $_GET['code'] : FALSE;
$access_token = isset($_SESSION['access_token']) ? $_SESSION['access_token'] : FALSE;
Kullanıcı Facebook'a giriş yapıp gerekli izinleri vermişse (2. adımda) Facebook'tan code isimli bir değişken geliyor. Yine 2. adımın sonunda access_token verisi geliyor. PHP NOTICE hatası almamak için gelip gelmediklerini kontrol edip veri yoksa FALSE değerini veriyoruz
$login_url = 'https://graph.facebook.com/oauth/authorize?client_id=' . $app_id . '&redirect_uri=' . $base_url . 'connect.php&scope=email,user_about_me,user_birthday,user_photos';
Kullanıcıyı Facebook üzerinden giriş yapması için yönlendireceğimiz adres. Buradaki scope parametresinde kullanıcıdan almak istediğimiz verileri belirliyoruz. (Detaylar için: http://developers.facebook.com/docs/authentication/permissions/ sayfasını ziyaret ediniz.)
/*
* Adım 1
*/
if (!$access_token && !$code)
{
header('Location:' . $login_url);
}
/**
* Adım 2
*/
elseif (!$access_token && $code)
{
$furl = make_request('https://graph.facebook.com/oauth/access_token?'
. 'client_id=' . $app_id . '&'
. 'redirect_uri=' . $base_url . 'connect.php&'
. 'client_secret=' . $secret . '&'
. 'code=' . $code);
parse_str($furl, $response);
if (isset($response['access_token']))
{
//Sonraki sayfalarda tekrar tekrar istek yapmamak için $_SESSION'a kaydetmekte yarar var.
$_SESSION['access_token'] = $response['access_token'];
/*
* Adım 3
*/
$me = json_decode(make_request('https://graph.facebook.com/me?fields=id,first_name,last_name,location,picture,email,birthday,gender&access_token=' . $response['access_token']));
if (isset($me->id))
{
//Burada gelen verileri istediÄŸimiz ÅŸekilde kullanabiliriz.
$_SESSION['me'] = $me;
}
header('Location:' . $base_url . 'index.php');
}
else
{
echo 'access token error';
}
}
1. Adım: $code ve $access_token yoksa kullanıcı yeni gelmiş demektir. Bu durumda login_url'ye yönlendiriyoruz. Kullanıcı giriş yaptıktan sonra Facebook code isimli bir değer gönderiyor.
2. Adım: Bu adıma geçtiğimizde kullanıcı giriş yapmış ve code değerimiz gelmiş demektir. Şimdi Facebook üzerinden access_token değerimizi almamız gerekiyor. make_request * fonksiyonu yardımıyla isteğimizi yapıyoruz ve Facebook'tan API isteği yaparken kullanacağımız access_token verisi geliyor. Her ihtimale karşı gelen veriyi kontrol edip hata varsa ekrana access token error yazdırıyoruz.
3. Adım: Bu adıma geldiğimiz zaman neredeyse tüm işlemleri halletmiş oluyoruz. Geriye sadece Facebook ile giriş yapan kullanıcının verileri için istek yapmak kalıyor. Buradaki fields parametresinde almak istediğimiz verileri belirliyoruz ve Facebook verileri json formatında bize gönderiyor. Bizde decode ederek me isimli değişkene atıyoruz. Her ihtimale karşı kontrol ederek me session'una atayıp kullanıcıyı index.php'ye geri gönderiyoruz.
Gelen veriler index.php dosyasında var_dump aracılığı ile tarayıcıda gözüküyor. Tabi burada siz ekrana yazmak yerine mevcut üyelik sisteminize kullanıcıyı otomatik olarak kaydedebilirsiniz. Uygulamanın çalışan halini buradan görebilir, buradan kaynak kodlarını indirebilirsiniz. (Bilgilerinizi bir yere kaydetmiyorum, gönel rahatlığıyla test edebilirsiniz )
Not: Eğer Error Validating Verification_code hatasıyla karşılaştıysanız login_url ve 2. adımda istek yaparken kullandığınız redirect_uri değerleri farklı demektir. Hata almamak için bu değerlerin birebir aynı olması gerekiyor. (Hayır sonuna ? bile koyamazsınız.)
* make_request fonksiyonunu uygulama'nın connect.php dosyasında bulabilirsiniz.
Teşekkürler kardeşim ilk fırsatta deneyecem bakalım baaşrabilirmiyiz. :D
Peki güzel kardeÅŸim üyeyi bu bilgiler ile kendi sitemize üye edeceÄŸiz, ama parola üyenin parolasını çekmemizin yolu yokmu, yani facebook üyenin parolasını md5 gibi bir algoritma ile veriyormu ?Â
 Hayır, Facebook gibi bir site hangi algoritma ile şifrelerse şifrelesin kesinlikle üye şifrelerini paylaşmaz.
Kullanıcı Facebook üzerinden izin verip uygulamaya geri döndüğü zaman bir defalığına mahsus şifre belirlemesini isteyebilir veya rastgele bir şifre üretip mail adresine gönderebilirsiniz.
Ama buradaki asıl amaç kullanıcıya sadece kayıt bölümünde değil siteye giriş bölümünde de Facebook'u kullanabilme imkanı sunmak. Sitenizde Facebook ile giriş yapma imkanı sunarsanız bir çok üyeniz normal giriş formunu kullanmak yerine Facebook ile giriş yapacaktır.
{
"error": {
"type": "OAuthException",
"message": "Invalid redirect_uri: Verilen URL'ye Uygulama yap\u0131land\u0131rmas\u0131 izin vermiyor."
}
}Bu şekilde bir hata alıyorum sizce nasıl kurtulurum bundan?
redirect_uri değerinde problem var galiba. Yukarıda verdiğim kodlardamı oluştu bu hata?
peki çıkış işlemi için nasıl bir yöntem uygulamamız gerekiyor?
Kullanıcıyı aşağıdaki url'ye yönlendirin. Kullanıcı çıkış yaptıktan sonra next parametresine yazdığınız url'ye geri dönecektir. Tabi bu arada session'daki access_token değerini de unset etmelisiniz.
$logout_url = 'http://www.facebook.com/log... . $base_url. '/logout.html&access_token=' . $access_token;
unset($_SESSION['access_token']);
header('Location:' . $logout_url);
bende en yakın zamanda deneyeceğim. inşallah çalışır...
çalışmıyor malesef. error diyor.
10 numara çalışıyor sağol kardeş paylaşım için, Emre Erbaklı ile aynı sorunu yaşayanlar o adrese uygulama açsın facede, o yüzden olmuyor.
o adrese derken hangi adrese acaba  biraz ayrıntılı anlatabilirmisniz zahmet olmazsa?  bende sorun yaşıyorum aynı konuda :(
Teşekkür ederim bu paylaşım için. ben aynen connect yaptım hiçbir sorun yok facebook ile giriş ve kayıtları alıyorum. Yalnız kayıt olduğunda ya da uygulamaya izin verdiğinde veya siteye her giriş yaptığında o kişinin duvarında bunu duyursun istiyorum. open graph dan nesne ve eylem türü yarattım. kodu aldaki bilgileri make_request le atıyorum ama olmuyor test yapmak için. bununla da ilgili bir yazı yazar yardımcı olursanız sevinirim.
teşekkürler emeğinize sağlık
güncel facebook login işlemi için suradan yararlanabilrsiniz :
http://www.turkceteknik.com...
facebook parola vermez. sadece temel bilgiler. ve sonra izin alırsan diğer özel bilgiler. ama parola vermez.
o adres dediği : facebook developer sayfası.
facebook 2012 php baglanma login işlemleri için :
http://www.turkceteknik.com...
bir bakmanı öneririm.
Uygulama açmalısın dediği, Facebook uygulama geliştirmelisin:
http://www.turkceteknik.com...
kolay gelsin
Çok teşekkürler çok güzel anlatmışsınız..
ya iyide tek tek nasıl alıcaz bu verileri.
peki bloggera da facebook ile giris mumkun mu
Mustafa bey verdiginiz bilgiler için çook teşekkür ederim. Peki Bişey sorucam Kullanıcı Adına Paylasım Yapma imkanımız varmı ?
bu uygulamada graph api yani dizi olarak değil de isim=zz soyisim=sss diye çekebilirmiyiz?
bu uygulamada graph api yani dizi olarak değil de isim=zz soyisim=sss diye çekebilirmiyiz?
merhaba,
mevcut üye veritabanımda kullanıcı adı email şifre alanları var.
facebook logşn uygulaması ile bu bilgileri veritabanına yazıp
session değeri alarak index sayfamıza yönlendirebilmek mümkün mü?
selamlar
merhaba ben facebook üzerinden bir uygulama oluşturdum. Uygulama çalışıyor. login sırasında ben ziyaretçiden doğum günü ve lokasyon bilgisinide paylaşmasını istiyorum. Bu ayarı facebook uygulama kısımında mı yoksa oluşturduğumuz kodlarda mı yapmamız gerekiyor acaba?
Şifreyi alamzsın ama mümkün. Ben şuanda bu şekilde kullanıyorum. Face ile login deniyor. Kayıtlarım arasında varsa oturum açtırıyorum. Kayıtlarım arasında yokse yeni üye kaydediyorum.