.NET ile Facebook Üyelik

 Ana Sayfa / / .NET ile Facebook Üyelik

Üyeleriniz Facebook hesapları ile giriş yapsın!

Facebook.com üyelik alt yapısını kullanıp, hazırladığınız web sitelerinin üyelik kayıtlarını Facebook'un bir aplikasyonu olan "Login with Facebook" ile entegre edebilirsiniz. Dünya üzerinden yaygın üye ağını sahip ve ülkemizde de yaygın olarak  yaklaşık 25 milyon Türk kullanıcısının üye olduğu Facebook hesaplarının ayı hesap bilgilerini kullanarak web sitemize üye olmaları bir avantaj sağlar. Yeniden üyelik giriş formu doldurmayacakları gibi sıklıkla kullandıkları facebook hesap bilgileriyle giriş yapabilmelerini sağlarsak hem onlara kolay bir üyelik sistemi sağlamış oluruz hem de üye sayımızın daha fazla artmasını sağlarız.

İşleme başlamadan önce  facebook.com üzerinde kayıtlı bir hesabımızın olması gerektiğini unutmayalım. Facebook.com sayfamıza giriş yaptıktan sonra http://developers.facebook.com/setup adresine girip sitemiz için bir uygulama oluşturacağız.

Site name : Web sitenizin adı olacak.
Site URL : Web sitenizin adresi olacak. ( sonunda "?" yada "#" gibi dinamik sayfaların olduğu adresler kabul edilmiyor. Tam adres olmalıdır.)
Locale : Web sitemizde kullandığımız dili seçmeliyiz.

Uygulama oluşturma işlemini bitirdiğimiz facebook.com bize daha sonra kullanmak üzere APP ID ve APP SECRET olarak iki değişken verecektir. APP ID ve APP SECRET değişkenlerimiz oluştuktan sonra facebook.com üzerinden veri çekebilmemiz yada veri yazabilmemiz için "Graph Api" denilen bir servisi kullanmamız gerekmektedir. Servis detaylarına aşağıda bulunan URL üzerinden ulaşabilirsiniz.
http://developers.facebook.com/docs/api

Bu tarz entegrasyonları ASP.NET web projelerimizde kullanabilmemiz için codeplex.com üzerinde açık kaynak kod olarak geliştirilen Hammock adlı projedeki bazı classları kullanacağız. Hammock projesine aşağıdaki URL'den ulaşabilirsiniz.
Download Demo Project

Gerekli dosyaları edindikten sonra yeni bir web projemiz yada mevcut projemiz ile entegrasyona geçelim.

AppID ve AppSecret değerlerimizi projemizin web.config dosyamızın içine ekleyelim.
İndirdiğimiz Hammock projesindeki Hammock.dll dosyasını projemize referans ederek ekleyelim. Web.Config dosyamızdaki değişiklikleri yaptıktan sonra ve DLL dosyamızı ekledikten sonra sitemizdeki login bölümünden graph.facebook.com adresine bir yönlendirmede bulunmamız gerekmektedir. Linki tanımlarken bize özel türetilmiş olan AppID değerini ve serviten dönecek olan kendi sayfamızın adresini ki facebookCallback.aspx olarak daha sonra sayfayı oluşturacağız, bunları belirlemeliyiz. Gideceği sayfada kullanıcı web sitemizin bilgilerine erişebilmesi için izin verdiği takdirde belirtmiş oldğumuz callback sayfamıza ("facebookCallback.aspx") belli değerler ile geri dönüş yapacak.

Yukarıda oluşan linkten gelecek sonucu işleyebilmemiz için callback sayfası’nın page_load() eventında dönen sonuçları işleyerek kullanıcı bilgilerine erişeceğiz.

protected  void  Page_Load(object sender, EventArgs e)
{
//Kullanıcı izin verdiye servisten bize code isminde bir değer dönmesi gerekiyor
if (!string.IsNullOrEmpty(Request["code"]) && !Page.IsPostBack)
{
VeriCek();
}
}
private void VeriCek()
{
//Authority işlemleri için kullanılan client ve request nesnelerimizi oluşturuyoruz
RestClient client = new RestClient { Authority = "https://graph.facebook.com/oauth/" };
RestRequest request = new RestRequest { Path = "access_token" };
//Facebook AppID değerimiz
request.AddParameter("client_id", ConfigurationManager.AppSettings["FacebookAppID"]);
//Daha önceden de kullandığımız callback adresimiz
request.AddParameter("redirect_uri", "http://www.marenova.net/facebookCallback.aspx");
//Facebook AppSecret değerimiz
request.AddParameter("client_secret", ConfigurationManager.AppSettings["FacebookAppSecret"]);
//Bize geri dönen code değerimiz
request.AddParameter("code", Request["code"]);
RestResponse response = client.Request(request);
//Dönen değerlerin dönüşüm işlemlerini tamamlıyoruz
StringDictionary result = Parse(response.Content);
string appToken = result["access_token"];
//appToken değişkeni bizim verdiğimiz değerlerle servisin verdiği değişkenleri karşılaştırarak
//yeni değer üretir, daha sonra bu değişkenle tekrar servise bağlanıp istekte bulunduğumuz nesneyi
//bize geri bildirilmesini sağlar
Detay(appToken);
}
private StringDictionary Parse(string queryString)
{
queryString = queryString + "&";
StringDictionary outc = new StringDictionary();
Regex r = new Regex(@"(?<name>[^=&]+)=(?<value>[^&]+)&", RegexOptions.IgnoreCase | RegexOptions.Compiled);
IEnumerator enums = r.Matches(queryString).GetEnumerator();
while (enums.MoveNext() && enums.Current != null)
{
outc.Add(((Match)enums.Current).Result("${name}"), ((Match)enums.Current).Result("${value}"));
}
return outc;
}

private void Detay(string sToken)
{
//Authority işlemleri için kullanılan client ve request nesnelerimizi oluşturuyoruz
RestClient client = new RestClient { Authority = "https://graph.facebook.com/" };
//Path değerimiz "me" yani login olan kullanıcı bilgilerini bize geri döndürüyor.
//Bu kısımda bir çok path değerleri var. Ör: me/friends, me/photos gibi...
RestRequest request = new RestRequest { Path = "me" };
request.AddParameter("access_token", sToken);
RestResponse response = client.Request(request);
JavaScriptSerializer ser = new JavaScriptSerializer();
//Bize dönen değer json formatında bir User nesnesi,
//Uygun bir C# clasına direkt atama yaptırabiliyoruz.
SocialUser user = ser.Deserialize<SocialUser>(response.Content);
if (user != null)
{
//user.id değeri her kullanıcı için unique bir değer
//Sizde bu değere göre kendi projenizde ilişkilendirmeler yapabilirsiniz.
//Gerisi sizin hayal gücünüze kalmış :)
 
Response.Write(user.name + "/" + user.id + "<br><img src=\"https://graph.facebook.com/" + user.id + "/picture\">");
}
}


Projemizde kullandığımız SocialUser nesnemiz.
public class SocialUser
{
public string id { get; set; }
public string name { get; set; }
public string email { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
}